• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

应用websocket示例时,为什么sha1sum会输出不同的结果?

linux 来源:Hachi 16次浏览

背景: 我正在学习websockets并尝试实现一个最小服务器。应用websocket示例时,为什么sha1sum会输出不同的结果?

我的问题: 按照official rfc documentation的字符串"dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11" SHA1哈希应该是"b37a4f2cc0624f1690f64606cf385945b2bec4ea"。 这也是sha1-online打印。

但是在使用该工具SHA1SUM bash作为建议在计算器几次,结果是不同的:

$ echo "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11" \ 
    | sha1sum \ 
    | cut -d " " -f 1 
05082898ab78f6da9c1ad2587b8012cd0cf52172 

我试了一下: 我想这可能是混合的十六进制二进制字符串的一些问题表示法,但使用xxd来回转换并没有使我更接近正确的解决方案。

openssl dgst -sha1打印完全相同的结果为这个特殊的输入字符串

我的问题是,是有什么问题我如何使用工具SHA1SUM还是有某种错误的(我使用的版本GNU coreutils 8.21)?

编辑:在某些测试中,我宁愿用一个下面的字符串,但是,显然增加了一个新行过,我不知道

$ sha1sum <<< "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11" \ 
    | cut -d " " -f 1 
05082898ab78f6da9c1ad2587b8012cd0cf52172 

===========解决方案如下:

SHA1哈希字符串“dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11”的应该是 “b37a4f2cc0624f1690f64606cf385945b2bec4ea

答案是

问题是与您的echo它默认输出新线(\n)字符的,你可以看到下面的字符串的结尾,

echo "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11" | hexdump -c 
0000000 d G h l I H N h b X B s Z S B u 
0000010 b 2 5 j Z Q = = 2 5 8 E A F A 5 
0000020 - E 9 1 4 - 4 7 D A - 9 5 C A - 
0000030 C 5 A B 0 D C 8 5 B 1 1 \n 
000003d 

现在使用-n标志不打印新行字符,

echo -n "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11" | hexdump -c 
0000000 d G h l I H N h b X B s Z S B u 
0000010 b 2 5 j Z Q = = 2 5 8 E A F A 5 
0000020 - E 9 1 4 - 4 7 D A - 9 5 C A - 
0000030 C 5 A B 0 D C 8 5 B 1 1 
000003c 

所以做你的实际的例子一样,

echo -n "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11" \ 
    | sha1sum \ 
    | cut -d " " -f 1 
b37a4f2cc0624f1690f64606cf385945b2bec4ea 

echo

-n的人man页面不输出其后的换行符

这是更好地使用更轻便printf(见Why printf is better then echo)为此,

printf "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11" \ 
    | sha1sum \ 
    | cut -d " " -f 1 
b37a4f2cc0624f1690f64606cf385945b2bec4ea 

此外,你可以摆脱任何第三方GNU工具,如cut,对于这一点,只是内置set处理定位参数输出,

set -- $(printf "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11" | sha1sum) 

printf "%s\n" "$1" 
b37a4f2cc0624f1690f64606cf385945b2bec4ea 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)