我目前正在使用bash脚本测试一个简单的字典攻击。我只需输入以下命令就可以将我的密码“Snake”编码为sha256sum:
echo -n Snake | sha256sum
这产生了以下结果:
aaa73ac7721342eac5212f15feb2d5f7631e28222d8b79ffa835def1b81ff620 *-
然后我将哈希字符串粘贴到程序中,但脚本没有按照预期的方式执行。脚本是(注意我创建了一个只包含6行的测试字典文本文件):
echo "Enter:"
read value
cat dict.txt | while read line1
do
atax=$(echo -n "$line1" | sha256sum)
if [[ "$atax" == "$value" ]];
then
echo "Cracked: $line1"
exit 1
fi
echo "Trying: $line1"
done
结果:
Trying: Dog
Trying: Cat
Trying: Rabbit
Trying: Hamster
Trying: Goldfish
Trying: Snake
代码应显示“Cracked:Snake”并在将散列字符串与单词“Snake”进行比较时终止。我哪里错了?
编辑:错误确实是我文本文件中的DOS行。我制作了一个unix文件并且校验和匹配。谢谢大家。答案 0 :(得分:1)
几个问题 - 变量名称没有设置在任何地方 - 你的意思是价值吗?也更好的形式使用重定向而不是猫
while read ...; do ... done <dict.txt
管道中的while循环设置的变量在父shell中不可用,而不是像我之前错误地说的那样 - 虽然这不是问题
答案 1 :(得分:1)
一个问题是,正如巴基斯坦程序员俱乐部指出的那样,你永远不会初始化name
(而不是line1
)。
另一个问题是sha256sum
不仅打印出校验和,还打印*-
(意思是“我以二进制模式从标准输入读取文件”)。
我不确定是否有一种干净的方式来获得校验和 - 可能存在,但我找不到它 - 但你至少可以这样写:
atax=$(echo -n "$name" | sha256sum | sed 's/ .*//')
(使用sed
从空间开始剥离所有内容。)
答案 2 :(得分:0)
可能是剪切n粘贴错误 - 在第一次读取后添加回显
echo "value \"$value\""
也是在设置atax之后
echo "line1 \"$line1\" atax \"$atax\""