Я создал небольшой скрипт генерации пароля. Мне интересно, какие улучшения могут быть сделаны для него за исключением обработки ошибок ввода, информации об использовании и т. Д. Это основная функциональность, которую я заинтересован в улучшении.Улучшите мой сценарий генерации пароля
Это то, что он делает (и что мне нравится это делать):
- Держи его легко изменить, которые Строчные символы (L), прописные символы (U), Число (N) и символы (S), которые используются в паролях.
- Я бы хотел, чтобы я нашел новый пароль для legnth 10 для меня не более двух секунд.
- В качестве аргумента должна использоваться переменная длина строки пароля.
- Должен быть принят только пароль, содержащий хотя бы один L, U, N и S.
Вот код:
#!/bin/bash
PASSWORDLENGTH=$1
RNDSOURCE=/dev/urandom
L="acdefghjkmnpqrtuvwxy"
U="ABDEFGHJLQRTY"
N=""
S="\-/\\)?=+.%#"
until [ $(echo $password | grep [$L] | grep [$U] | grep [$N] | grep -c [$S]) == 1 ]; do
password=$(cat $RNDSOURCE | tr -cd "$L$U$N$S" | head -c $PASSWORDLENGTH)
echo In progress: $password # It's simply for debug purposes, ignore it
done
echo Final password: $password
Мои вопросы:
- Есть ли лучше способ проверить, если пароль является приемлемым, чем то, как я делаю это ?
- Как насчет генерации пароля?
- Какие-либо улучшения стиля кодирования? (Короткими именами переменных являются временные. Хотя я использую имена верхнего регистра для «константы» [я знаю, что формально нет] и строчные буквы для переменных. Вам нравится?)
Проголосовать за наиболее совершенные версия. :-)
Для меня это было просто упражнение в основном для удовольствия и как опыт обучения, хотя я начну использовать его вместо поколения из KeepassX, которое я сейчас использую. Будет интересно посмотреть, какие улучшения и предложения принесут более опытные Башистас (я сделал это слово).
Я создал небольшой базовый сценарий для измерения производительности: (В случае, если кто-то думает, что это весело)
#!/bin/bash
SAMPLES=100
SCALE=3
echo -e "PL\tMax\tMin\tAvg"
for p in $(seq 4 50); do
bcstr=""; max=-98765; min=98765
for s in $(seq 1 $SAMPLES); do
gt=$(\time -f %e ./genpassw.sh $p 2>&1 1>/dev/null)
bcstr="$gt + $bcstr"
max=$(echo "if($max < $gt) $gt else $max" | bc)
min=$(echo "if($min > $gt) $gt else $min" | bc)
done
bcstr="scale=$SCALE;($bcstr 0)/$SAMPLES"
avg=$(echo $bcstr | bc)
echo -e "$p\t$max\t$min\t$avg"
done
Проверьте 'secpwgen' (или, может быть,' pwgen'), он уже делает это :) –
Я проверю все предложения, и я ценю их! Однако у меня есть особые требования к используемым персонажам (я написал их на бумаге и удалил тех, кто слишком похож, чтобы избежать путаницы). Вопрос в большей степени связан с упражнением по кодированию, чем с его решением «любым возможным способом». Мне бы хотелось, чтобы решение Bash работало с максимально возможной зависимостью от нестандартных приложений (которые могут быть не установлены). – 2009-09-23 15:54:04
Эй, какое у вас имя? ;) –