我正在尝试创建一个生成5个字母单词的单词循环,并且测试是针对测试然后如果不正确则生成下一个单词。然而,目前它一次产生所有53,200个单词,我只希望“myword”在时间上是1个单词
#!/bin/bash
i=1
for n in $(seq 0 54000)
do
IFS=$''
hash="hash"
myword=$(echo {a..z}{a..z}{a..z}{a..z}{a..z} | awk '{print $1}')
test=$(echo -n "$myword" | awk '{print $1}')
if [ "$test" == "$hash" ]
then
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! The password is $test1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
break
else
echo "Password $myword is incorrect"
echo "$test"
fi
done
这是一个循环。
答案 0 :(得分:0)
您实际上并未在此使用i
或n
;你真正想要迭代的是可能的5个字母组合。这不是真正推荐的,因为在开始迭代之前生成完整列表需要很长时间才能生成:
hash="hash"
for myword in {a..z}{a..z}{a..z}{a..z}{a..z}; do
test=$(echo -n "$myword" | awk '{print $1}')
if [[ $test = $hash ]]; then
break
else
...
fi
done
最好将迭代分解为更多离散的块;它总体上不会更快,但你至少可以在没有先在内存中生成所有11,881,376种可能性的情况下开始实际计算。
for a in {a..z}; do
for b in {a..z}; do
for c in {a..z}; do
for d in {a..z}; do
for e in {a..z}; do
myword="$a$b$c$d$e"
test1=...
if [[ ... ]]; then
break 5
fi
done
done
done
done
done
但最好的想法是使用专为通用数据处理而设计的语言,而不是bash
。特别是,一种带有用于计算SHA-256校验和的库的语言,而不是为每个密码分配一个新程序。