打印 SHA 和末尾不带“-”?

打印 SHA 和末尾不带“-”?

是否可以打印 SHA 总和而不将其-附加到末尾?

$ echo test | sha1sum 
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83  -  <--- this "-" dash/hyphen

我知道我们可以使用awk其他命令行工具,但是可以不使用其他工具来完成吗

$ echo test | sha1sum | awk '{print $1}'
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83

答案1

由于 sha1sum 哈希值有 40 个字符长,因此您可以将输出通过管道传输到 head 命令中并从中提取前 40 个字符:

echo test | sha1sum | head -c 40

来源:https://stackoverflow.com/a/14992739/4642023

答案2

如果没有其他工具或没有编辑实际的 sha1sum 脚本/二进制文件,这是不可能的。当 sha1sum 被输入一个文件时,它会在总和后打印文件名。当 sha1sum 未提供文件或与管道一起使用时。它将 - 作为占位符来指示输入不是文件。

答案3

在 bash 中,没有额外的工具。

h=($(echo test | sha1sum )) ;echo $h 

4e1243bd22c66e76c2ba9eddc1f91394e57f9f83

或者

 h=( `echo test | sha1sum` ) ;echo $h 

在 bash 中,这使用 h 的“数组”声明来创建标记的多索引数组。使用 $h 索引数组再次引用变量与 ${h[0]} 相同

使用基本的 shell 替换

 h=`echo test | sha1sum` ;echo ${h// */} 

或 posix shell (sh, dash, bash) 删除后缀%

h=`echo test | sha1sum` ;echo ${h%-}

尽管使用数组是更直观的选择,但也可能会成功。

添加base64

xxd + base64 可用于增加可打印字符范围中的熵(减少位数)

 h=($(echo test | sha1sum )) ;echo $h|xxd -r -p |base64
ThJDvSLGbnbCup7dwfkTlOV/n4M=

答案4

似乎很奇怪没有人提到这一点,但我发现使用“tr”命令修剪输出是最简单的。没有什么反对 bash/perl/python 正则表达式的,但如果不用谷歌搜索 5 分钟我永远无法得到它们。

$ echo -n "hello" | sha256sum | tr -d "\n *-"
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

相关内容