从bash生成sha256(无回声)

时间:2017-09-23 00:56:20

标签: bash

我正在尝试编写一个逐行运行文件的基本脚本,使用sha256对每一行进行加密,然后将其与固定测试进行比较以获得匹配结果。

Row

file.txt

我的代码:

foo
bar
bazz
password

结果:

#!/bin/bash
file="./file.txt"
while IFS='' read -r line || [[ -n "$line" ]] ; do
    password="5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8"
    echo "Testing $line: "
    try=$line | sha256sum
    if [[ "$try" == "$password" ]] ; then
        echo "match"
    else
        echo "no match"
    fi
done <"$file"

我认为testing foo e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 - no match testing bar e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 - no match testing bazz e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 - no match testing password e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 - no match 是问题所在,因为如果我使用try=$line | sha256sum中的示例单独运行它:

file.txt

foo | sha256sum foo: command not found e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 - 放入&#34;&#34;不会改变上面的结果

我能够正确处理管道的唯一方法是在前面放置一个foo

echo

这不是理想的结果,因为我不想打印每个sha256sum我只是想对该行进行编码然后检查它。如果匹配则打印匹配,否则不匹配。

预期结果:

echo -n foo | sha256sum
2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae

1 个答案:

答案 0 :(得分:3)

打印该行以将其传送到sha256将不会将其打印到屏幕上。但是,如果要捕获sha256的输出,则需要使用命令替换而不是仅运行命令。

那一行应该是:

try="$(printf '%s' "$line" | sha256sum | cut -f1 -d' ')"

我们将使用printf instead of echo然后从管道中捕获stdout并将其存储在变量try中。此外,sha256sum会打印正在阅读的文件,包括stdin,因此我们将使用cut来删除该部分。