bash - 从 bash 生成 sha256(无回显)

标签 bash

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

文件.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  -

foo 放在 ""中不会改变上面的结果

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

echo -n foo | sha256sum
2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae

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

预期结果:

testing foo #2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae  -
no match
testing bar #fcde2b2edba56bf408601fb721fe9b5c338d10ee429ea04fae5511b68fbf8fb9  -
no match
testing bazz #ef9b462f01f881c97791114d6244476bb33e418d3dbe0ee0967c4c80e764cd9c  -
no match
testing password #5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8  -
match

最佳答案

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

那一行应该是:

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

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

关于bash - 从 bash 生成 sha256(无回显),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46374968/

相关文章:

bash - 如何制作一个脚本来对一个文件进行多个 grep?

linux - 运行 var 中存储的命令时出现 Bash 错误 "command not found"

bash - 如何在进入目录时自动运行 bash 脚本?

bash - awk 和 bash 脚本?

带有 sleep() 语句的 Python 脚本在后台运行时不会记录

linux - 我们可以从文件中执行 grep 和 sed 并将输出推送到变量中吗

bash - 使用 tshark grep tcpdump

bash - 使用 awk 在 shell 脚本中按制表符拆分字符串不起作用

bash - 使用 sed 将变量打印到文件末尾

c++ - 无法使用 gdb 生成 shell