Поскольку вы используете массивы LIST1
... LIST5
только для конструкций 5 × for
, я бы заменил их расширениями скобок. Таким образом, вы получите только один l oop.
Вместо ручного перечисления и проверки пар переменных, таких как encr1
и salt1
, используйте три массива encr
, salt
и algo
(алгоритм, который вы указали ранее). Затем вы можете использовать al oop для перебора всех этих троек вместо того, чтобы писать каждую проверку вручную.
#! /bin/bash
n=4
encr=(
".8742cNKlzqQ8Mgjip/Fg1"
"31HvJ8Iinxk2k"
"AyPVCzU.ourSwFdL3N6/YP9RRfIwwKZPNrnt0/yn5vB"
"Cd9AjUI4nGglIcP3MByrZUnu.hHBJc7.eR0o/v0A1gu0/6ztFfBxeJgKTzpgoCLptJS2NnliZLZjO40LUseED/"
)
salt=(bCgxj8Yt 31 klPjs90j 8899Uidd)
algo=(MD5 SHA-256 SHA-512 des)
for candidate in {K,F,L,W}{8,2,9}{x,b,s,v}{'~','-','[','*'}{'$','+',']','%'}; do
for (( i = 0; i < n; i++ )); do
test="$(mkpasswd -m "${algo[i]}" "$candidate" -s "${salt[i]}")"
if [ "$test" = "${encr[i]}" ]; then
echo " ${algo[i]} Salted Hash Password is: $candidate"
echo " Salt: ${salt[i]}"
fi
done
done
Здесь я удалил дублированный 2
из кандидатов на второй символ. Спасибо Гордону Дэвиссону за указание на это.
Кстати: я использовал имена переменных из вашего оригинального сценария. Однако было бы лучше назвать массив хэшей чем-то отличным от encr
. Хеширование и шифрование отличаются - точно так же, как измельчение листа бумаги и последующая сортировка фрагментов отличаются от блокировки всей бумаги.