Encryption SHA1编码为十六进制有40个字符和160位

Encryption SHA1编码为十六进制有40个字符和160位,encryption,encoding,openssl,sha1,Encryption,Encoding,Openssl,Sha1,SHA1摘要的长度应为160位。但它通常表示为一个包含40个字符的字符串。考虑到8位字节,1个字符对应1个字节,在我看来,SHA1摘要应该有20个字节,十六进制表示为40个字节 例如,使用OpenSSL我可以得到以下结果(手动删除添加的额外信息后): 明确的信息:唯一可能的革命是在我们内部 在我得到的每个文件中应用wc wc sha1_binary sha1_hex 0 1 20 sha1_binary 0 1 40 sha1_hex 0 2 60 total 所以我有两个问题:

SHA1摘要的长度应为160位。但它通常表示为一个包含40个字符的字符串。考虑到8位字节,1个字符对应1个字节,在我看来,SHA1摘要应该有20个字节,十六进制表示为40个字节

例如,使用OpenSSL我可以得到以下结果(手动删除添加的额外信息后):

明确的信息:唯一可能的革命是在我们内部

在我得到的每个文件中应用wc

wc sha1_binary sha1_hex 
 0  1 20 sha1_binary
 0  1 40 sha1_hex
 0  2 60 total
所以我有两个问题:

  • 为什么十六进制转储中还有20个字符
  • 这些额外的位是如何插入的?我可以注意到十六进制转储中的每个字节都以36开头。有什么特别的原因吗

  • 我已经看到了一个类似的问题,但我不确定我是否太愚蠢而不理解答案,或者答案是否真的很差。感谢您的帮助。

    160位/8=20字节;十六进制字节是2个字符(
    00
    FF
    )和2*20=40个十六进制字符

    较长的输出是十六进制编码哈希的十六进制编码版本

    这到底是什么意思,谁知道呢

    var s=“32 64 66 61 33 35 66 62 35 37 34 65 36 62 65 36 32 33 62 63 36 31 61 61 32 63 61 31 65 66 39 30 36 62 39 38 34”。拆分(“”);
    对于(变量i=0;i}
    这就是当我得到2D FA 35 FB 57 4E 6B E6 23 B7 C6 1A CA 2C A1 EF 90 6B 9C 84时发生的情况,实际上有20*2=40个十六进制数字。现在它是如何变成32 64 66 61 33 35 66 62 35 37 34 65 36 62 65 36 32 33 62 37 63 36 31 61 63 32 63 61 31 65 66 39 30 36 62 39 63 38 34有40*2=80十六进制的,对吗?哦,事情现在变得更清楚了!为什么OpenSSL会使用这种双十六进制编码作为默认选项?这似乎毫无意义,不是吗?非常感谢您提供的示例,它非常有用。我在这里给出了类似问题的初步答案:
    wc sha1_binary sha1_hex 
     0  1 20 sha1_binary
     0  1 40 sha1_hex
     0  2 60 total