Bash Script IF语句无效

时间:2016-08-21 00:44:04

标签: bash shell if-statement

我目前正在使用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文件并且校验和匹配。谢谢大家。

3 个答案:

答案 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\""