脚本中的简单密码破解程序在找到正确密码时不会结束


#!/bin/bash
commonguess(){
for guess in $(cat passwordlist)
do
try=$(echo "$guess" | sha256sum | awk '{print $1}' )
if [ "$try" == "$xxx" ]
then
echo "$name:$try"
break
fi
done
}
dict(){...}
brute(){...}
while IFS=':' read -r name hashing;do
commonguess
dict
brute
done

我测试了所有3个功能,它们工作得很好。唯一的问题在底部。

a:123
b:234
c:111

例如,我有一个名为"user"的文件。如果我用这个文件运行我的代码,我的代码将通过3个函数测试a(123)的值,即使它在第一个函数中找到答案。我不想那样做,我想做一些事情,比如测试值,如果在function1中没有找到,然后移动到下一个函数,如果找到答案,然后移动到下一个值

将commonguess中的break替换为"return 0",在函数末尾添加"return 1",对其他函数执行相同操作,并将while循环更改为:

while IFS=':' read -r name hashing;do
      commonguess || dict || brute
done

关于bash条件短路计算的更多信息在这里:http://wresch.github.io/2014/04/24/bash-short-circuit-evaluation.html

最新更新