Ответы:
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 и вам также необходимо хранить пароли для различных учетных записей, вы можете попробовать менеджер паролей Revelation . Он имеет базовую функцию генератора паролей, которая заключается в том, что вы устанавливаете только длину пароля и выбираете, следует ли включать знаки препинания помимо букв и цифр.
Поправьте меня , если я ошибаюсь, но: Насколько я понял, нет нет способа компьютера может прийти с совершенно случайной строкой. Поэтому я пришел к следующей идее [и надеюсь, что это не совсем глупо]:
Если бросить 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:]
fortr
(tr -dc '[:print:]'
), если вы немного параноик. Проблема тогда будет в символах, доступных на вашей клавиатуре ...