Відповіді:
pwgen - одна з багатьох програм для генерації паролів
Особисто я вважаю за краще не використовувати генератор паролів, оскільки генерований пароль дуже важко запам’ятати, але одне портативне рішення - використовувати / dev / urandom
Створення випадкових паролів, які не містять спеціальних символів, триває 10 символів:
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 10`
dyxJRKldvp
Це працює, захоплюючи байти з / dev / urandom, видаляючи ті, що не відповідають шаблону, вказаному в tr
команді, і обмежуючи його до 10 символів head
.
Створення випадкових паролів, які містять спеціальні символи, триває 10 символів:
$ cat /dev/urandom | tr -dc 'a-zA-Z0-9-_!@#$%^&*()_+{}|:<>?=' | fold -w 10 | grep -i '[!@#$%^&*()_+{}|:<>?=]' | head -n 1
MSF4wj@vP0
Для цього використовується дещо інша техніка після tr
видалення небажаних байтів, оскільки ідея полягає в тому, щоб змусити її мати хоча б один спеціальний характер. Це працює за допомогою fold
команди, щоб обернути рядок у групи по 10, потім використовувати grep
лише для отримання рядків, які містять спеціальний символ. head
потім вибирає перший пароль, який відповідає вимогам.
Я написав цей маленький сценарій кілька років тому і використовую його з тих пір. У всякому разі, це цікаве зловживання printf
і використовує прекрасну особливість BASH , що я , до жаль , рідко бачити в сценаріях: typeset
.
#!/usr/bin/env bash
# Released into public domain
# Aaron Bockover, 2005
# http://abock.org
typeset -i length; length=$1
typeset -i rounds; rounds=$2
[ $rounds -lt 1 ] && rounds=1
[ $length -lt 1 ] && {
echo "Usage: $0 <length> [<rounds>]" 2>/dev/null; exit 1;
}
for ((i=0; i < $rounds; i++)); do
for ((j=0; j < $length; j++)); do
set=$(($RANDOM % 20))
if [ $set -le 6 ]; then o=65; l=26; # 35% uppercase
elif [ $set -le 13 ]; then o=97; l=26; # 35% lowercase
elif [ $set -le 17 ]; then o=48; l=10; # 20% numeric
elif [ $set -le 18 ]; then o=58; l=7; # 10% symbolic
elif [ $set -le 19 ]; then o=33; l=15; fi
ord=$(($o + $RANDOM % $l))
printf \\$(($ord / 64 * 100 + $ord % 64 / 8 * 10 + $ord % 8))
done
echo
done
Я також додав би KeePassX, який дає вам можливість використовувати ентропію системи для створення надійних паролів з кількома приємними функціями - всі вони використовують графічний інтерфейс. Він також надає можливість керувати вашими паролями та зберігати їх у зашифрованому файлі.
Ось так виглядає інтерфейс генератора паролів KPX:
apg
це не поганий вибір, якщо ви хочете, щоб пароль легко запам'ятовувався.
; apg -m 16 -a 0 -t
ByajNudgolIston9 (Byaj-Nud-gol-Ist-on-NINE)
Af}ockhuecUjrak8 (Af-RIGHT_BRACE-ock-huec-Uj-rak-EIGHT)
IakijKadmomIvgig (Iak-ij-Kad-mom-Iv-gig)
NutIlOsyahodBeef (Nut-Il-Os-ya-hod-Beef)
anMechOybekazell (an-Mech-Oyb-ek-az-ell)
VumushCummAd{fra (Vum-ush-Cumm-Ad-LEFT_BRACE-fra)
Зауважте, що відповідно до цього , ваш пароль повинен бути не менше 12 символів.
Я використовую не випадковий характер, але досить різноманітний для всіх цілей атаки ... головний пароль та останній пропуск для створення інших паролів. Ось як я генерую головний пароль.
echo -n "some seed" | openssl dgst -binary -sha1 | base64 | sed -e 's/.\{4\}/& /g'
і вихід
H1sI Wpbj JE2P CdVJ A1qb 9B/e u7M=
тепер просто виберіть кілька розділів і введіть пароль, переставляйте їх, залиште деякі, додайте символ або 2, щоб зробити його таким же гарним, як випадковий. Поки ви можете запам'ятати своє насіння, ви можете відновити це та відновити свій пароль (до тих пір, поки ви не зробите занадто багато змін)
Ось одноразовий сценарій для створення паролів у стилі XKCD . /usr/share/dict/words
це не чудовий словник для цього, оскільки більшість слів довгі, але вони легко доступні. Для приємніших парольних фраз ви можете скористатися словником коротких слів, таким як список слів одноразового пароля S / Key .
dict="/usr/share/dict/words"
max="`wc -l <"$dict"`" \
perl -e '$count=4;
$/=\4; while (<>) {
print unpack('L') % $ENV{max} + 1, qq(\n); last unless --$count
}' /dev/urandom |
while read n ; do
tail -n "+$n" "$dict" | head -1
done
Якщо ви користувач GNOME і вам також потрібно зберігати паролі для різних облікових записів, ви можете спробувати диспетчер паролів Одкровення . Він має основну функцію генератора паролів: ви встановлюєте лише довжину пароля і вибираєте, чи не включати розділові знаки, крім букв і цифр.
Виправте мене, якщо я помиляюся, але: Наскільки я зрозумів це, немає можливості комп'ютеру придумати абсолютно випадкову рядок. Тому я придумав таку ідею [і сподіваюся, що це не зовсім дурно]:
Якщо ви кидаєте кости з 26 сторін, шанс кинути, скажімо, 26, це 1:26. Іншими словами: Шанс кинути 26 становить приблизно 0,04%. Крім того, у кубиків немає пам'яті та помилок. Я придумав таку ідею:
Моделі паперу для друку:
Примітка : Я не Math Pro, і я прийшов до цієї ідеї, прочитавши статтю в журналі 2600, в якій описано це. Я лише додав деякі основні ідеї до основної концепції.
Також : Цікаво, чи це не просто ідеальний приклад для " напишіть свій перший злому пароля ". Але ваше запитання дало мені ідеальну причину викласти цю ідею для обговорення.
У мій файл .zshrc.local додано два псевдоніми для створення надійних паролів.
Перший:
alias pw.graph="cat /dev/urandom | tr -dc '[:graph:]' | fold -w 1000 | perl -pe 's/(.)(?=.*?\1)//g' | head -n 5"
Вихід набравши pw.graph - це п'ять рядків кожного символу, які можна набрати на клавіатурі за винятком пробілу:
/d=|&mRq!g$QaNZ'L;CfEli,D3\)*h-jkerzv?{y"_Ic(0BtxJwF59:@G}KV1X2o>S~[#]s+W%A.<6bpTO^uP7U4HMYn`8
RIdW87{a4O3][?&rTn=m/:Y`_u*hqy2c%s@!ZPM$5to1f-.U9ClK,)'jDi0"pw>EzN^|gX~BSAJk\VFG(H<bx}+Q6#vL;e
s^H@yEo/X$|d?_jw7-n'l>m"Cb\W5.tTe0APB1D!#69[p+(8x}F&~RM`q3Q%vhfOiUZz]ucJk:)*agGV;=NY4{,K2SLrI<
$/t|!s}og5u:X~hcJUyYHf>;l<zDedL`.T*K8]CBSW[(xw+Mm^E3r16b-97%'@jVR{ZG#0p4AP=,I?\n&"a)vqNkQ2iO_F
,7n|^Y\%MpeBqvhI3mE<9zPS/~+sU`4ZoCWl&uxd'ft"kjcOy0X!{a-T_6RKiVg5Hb21D)w>@*N8;A[(rLG=$Q:.#]FJ?}
Другий:
alias pw.alnum="cat /dev/urandom | tr -dc '[:alnum:]' | fold -w 1000 | perl -pe 's/(.)(?=.*?\1)//g' | head -n 5"
Вихідним способом введення pw.alnum є кожне друковане письмо та цифра як верхнього, так і нижнього регістру:
E6wgCfVBbXjyzYQ8USKl79LqPih0e5mvGrNHd3osaW2OxkJ1RM4nFTtcuZIpDA
GTvQON1dsZSpJmegBMK6bqnEciU7k0AoV2H4Wh53zr9YRfLlDxywXItu8CjPFa
6u1Db9MfyBApZdU7gqoV2PGwH5LcxWi3JNj8nkQCIThezSlYEXsOtrmF04KvaR
VFrsGwI9yAmabEnlRTKgZO23vUq4f6LHkzQP7tMjNW8ph1exuDoBCXSd50JciY
G3r6Em5tlfjQARJx9gWHes7bCVwkzcP48KaSIXyUFBMLqT0op1uDNdih2nYZOv
Зазвичай я використовую pw.graph і копіюю випадкову частину рядка. Деякі паролі не дозволяють символів, тому я використовую для цього частину pw.alnum.
Я використовую цей збережений як файл .html:
<script>
var keylist="abcdefghijklmnopqrstuvwxyzABCEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*_"
var temp=''
function generatepass(plength){
temp=''
for (i=0;i<plength;i++)
temp+=keylist.charAt(Math.floor(Math.random()*keylist.length))
return temp
}
function populateform(enterlength){
document.pgenerate.output.value=generatepass(enterlength)
}
</script>
<form name="pgenerate">
<input type="text" size=32 name="output">
<input type="button" value="Generate Password" onClick="populateform(this.form.thelength.value)"><br />
<b>Password Length:</b> <input type="text" name="thelength" size=3 value="32">
</form>
[:print:]
дляtr
(tr -dc '[:print:]'
), якщо ви трохи параноїк. Проблемою тоді будуть символи, наявні на вашій клавіатурі ...