从Linux命令行生成SHA-256哈希值

4

我正在寻找一个单一命令,以十六进制数字形式发出一个文件内容的sha256哈希值。

我知道有shasum -a 256openssl dgst -sha256sha256sum等命令可以用来计算哈希值,但它们都会与校验和一起输出其他信息,我想避免使用sed或类似工具进行后处理。


shasum -a 256 file | awk '{ print $1 }' 有什么问题吗? - Raman Sailopal
“shasum -a 256 filename.txt | cut -f 1 -d " "” 存在什么问题? - lxg
我在寻找。我相信你的问题不适合在stackoverflow上讨论——你正在寻找一个实用程序,这在这里是不适合讨论的。我不知道是否有这样的“实用程序”——如果你想要一个,就自己写一个吧。不过,做single_command() { shasum -a 256 "$1" | cut -f 1 -d " "; }并将其添加到你的shell中是很容易的。你也可以考虑向你提到的实用程序提交补丁,以添加一些额外的命令行选项。 - KamilCuk
@KamilCuk 这实际上是在Shell脚本编程的背景下,这就是为什么我关心输出格式,但我不知道是否足够让它成为主题。尽管如此,SO上已经有很多类似的问题了。 - Per Mildner
@RamanSailopal 如果文件名包含例如控制字符等内容,则shasum +后处理解决方案都是不正确的,这也是我在我的shell脚本中“希望避免需要后处理”的原因之一。 - Per Mildner
显示剩余2条评论
2个回答

3

您可以使用:

sh -c 'shasum < "$1" | cut -d" " -f1' -- "$file"

0

以下的 Perl 一行代码似乎满足了我所有的要求:

perl -e 'use Digest::SHA;' -e 'use warnings;' -e 'use strict;' -e 'use autodie;' -e 'my $sha = Digest::SHA->new(256); open my $fh, $ARGV[0]; $sha->addfile($fh, "b"); print $sha->hexdigest . "\n";' "$file"

特别是对于“有趣”的文件名是安全的,并且可以用于任意的shell脚本,包括作为find --exec参数(这也是我需要它的原因之一)。

(我已经很久没有写Perl了,所以上面的内容可能还有改进的空间。)


sh -c 'sha256sum < "$1" | awk "{print \$1}"' -- 也是一个单行命令... 在 Perl 中没有特别的用法。你可以使用任何脚本语言来实现。 - KamilCuk
@KamilCuk 很棒!它比我的 Perl 代码片段更短更清晰。请将其添加为答案。 - Per Mildner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接