Вступление.Давно под виндой была у меня утилитка - пишешь в ней вполне осмысленное слово, а она выдаёт на него пароль. То есть, написал '
test' - программа выдала что-то вроде '
FG3fgT6fas5D' в зависимости от выставленных в ней настройках.
В чем несомненный плюс - создание криптостойкого пароля, при том, что мы его не запоминаем, не сохраняем в облаках и бумажках, а помним лишь слово 'test'
Под линукс не нашел ничего похожего, решил написать сам. Представляю на ваш суд
скрипт:#!/bin/bash
# "Ключи" для генерации (10 цифр, 26 больших и 26 строчных букв)
# ########## -- цифры
Dg="0123456789"
# ########################## -- прописные буквы
Up="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
# ########################## -- строчные буквы
Lo="abcdefghijklmnopqrstuvwxyz"
# Функция, при заданном i выдает десятичное число из хеша
hextodec ()
{
Pos=$(echo $((0x$(echo -n "$Data" | head -$i | tail -1))))
}
# Генерация хэша строки с разбиением на 16 подстрок-чисел
# с помощью этого "случайно" выбираются символы из ключей
Data=$(echo -n "$@" | md5sum | tr -cd [:alnum:] | fold -2)
#Создаём "псевдослучайный" набор прописных букв
#используем первые 4 числа хэша
for i in `seq 1 4`; do
hextodec
if (( Pos > 26 )) ; then
Pos=$(( Pos % 26 ))
fi
Word=${Up:Pos:1}$Word
done
#То же для строчных букв
#используем 5-8 числа хэша
for i in `seq 5 8`; do
hextodec
if (( Pos > 26 )) ; then
Pos=$(( Pos % 26 ))
fi
Word=${Lo:Pos:1}$Word
done
#То же для цифр
#используем 9-12 числа хэша
for i in `seq 9 12`; do
hextodec
if (( Pos > 10 )) ; then
Pos=$(( Pos % 10 ))
fi
Word=${Dg:Pos:1}$Word
done
#Разбрасываем числа и буквы по разным местам
#используем четыре последних числа из хеша для случайного
#порядка символов в пароле
for a in `seq 0 3`; do
b=$(( a+4 ))
c=$(( a+8 ))
i=$(( a+12 ))
hextodec
Pos=$(( Pos % 3 ))
case $Pos in
0) Result=${Word:a:1}${Word:b:1}${Word:c:1}$Result ;;
1) Result=${Word:b:1}${Word:c:1}${Word:a:1}$Result ;;
2) Result=${Word:c:1}${Word:a:1}${Word:b:1}$Result ;;
*) Result=$(echo '[!]Ваш компьютер не умеет делить на три =)') ;; #пасхалка =)
esac
done
echo $Result
Как пользоваться:1. Создаете скрипт с содержимым, не забываем поставить права на исполнение
2. Запускаете с "ключевым" словом, например
./script test
3. На выходе - офигенный пароль 2sJ2hND8dX1l, соответствующий ключевому слову test
Как работает:Вычисляется md5 ключевого слова, из него получаются 16 переменных (32/2). Из ключей и того, что наделал md5, выбираются символы - в текущем исполнении: 1-4 - большие буквы, 5-8 - строчные буквы, 9-12 - цифры. переменные 13-16 отвечают за порядок символов в итоговом пароле (большая-строчная-число, строчная-число-большая, число-большая-строчная).
Плюсы:Сложные пароли не запоминаем, не записываем - помним лишь повседневную информацию
Можно использовать даже кириллицу и спецсимволы.
В роли "ключей" - любые последовательности,
пароли от ключевого слова будут разные!
Заменяем Dg="0123456789"
Up="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Lo="abcdefghijklmnopqrstuvwxyz"
на
Dg="9054812736"
Up="THISISSUPERSEKRETPASSWORDQ"
Lo="никтонесломаетмойпарольхах"
Минусы:Точно знаю, код не оптимален, пишу в основном для себя, не заморачиваясь на красоту и скорость.
Нет возможности задать свои настройки длины пароля и набора символов без правки кода.
После замены ключа, большие, строчные буквы и цифры останутся на своих местах (как была цифра, допустим, на пятом месте, так цифра и останется на пятом).
Не рекомендую ставить тем людям, которые не разобрались в коде скрипта!Код откомментил, надеюсь, проще будет разбираться
В будущем планирую сделать человеческий интерфейс, хотя б zenity
Критика и советы приветствуются
Если будет интерес, конечно же, буду развивать проект