我的bash字典攻击函数将从字典中选择第一个单词并查看它是否与我的哈希进行比较然后停止,如果它没有,它将搜索整个字典但实际上不返回密码。当它停止时,密码总是" 1080",无论哈希是什么
我不明白发生了什么,但我已经研究了很多
dict_attack(){
TARGET_HASH=$1
while read WORD; do
WORD_HASH=$(echo $WORD | sha256sum | awk '{print $1}')
if [ "$WORD_HASH"=="$TARGET_HASH" ]; then
echo "Guessed it!"
echo "Password is : $WORD"
exit
fi
done < /usr/share/dict/linux.words
以下是脚本其余部分的调用。
dict_attack $1
答案 0 :(得分:0)
if [ "$WORD_HASH"=="$TARGET_HASH" ]
没有达到您的预期。它始终求值为true,因为字符串"$WORD_HASH"=="$TARGET_HASH"
始终为非空。在==
运算符周围添加一些空格并编写它:
if [ "$WORD_HASH" == "$TARGET_HASH" ]
答案 1 :(得分:0)
在==
(=
)命令(以及[
关键字)中test
(或[[
)周围需要空格:
if [ "$WORD_HASH" == "$TARGET_HASH" ]
否则你只是在进行-n
测试,即检查字符串是否为非零,这将始终为真,因为你有==
:
if [ -n "$WORD_HASH"=="$TARGET_HASH" ]