究竟什么是“长度为20的原始二进制格式”?

时间:2011-04-02 16:37:04

标签: php encoding binary numbers

在阅读Sha1-PHP Manpage

时,我出现了这个问题

它说:

  

如果可选的raw_output设置为   是的,然后是sha1摘要   以原始二进制格式返回   长度为20,否则退回   value是40个字符的十六进制   号。

对我来说,“二进制格式”是一系列逻辑真值或假值。通常用0和1表示。

如果您有20个并且将它们解释为数字,则您的数字范围为2 ^ 20个。

对于40位十六进制数字,这将是16 ^ 40,比2 ^ 20大约是1,4 * 10 ^ 42倍。

如果var_dump原始输出你只是乱码,如果你bin2hex它们,你最终得到如上所述的如此大的十六进制数。

所以我对这个问题的解释绝对是无稽之谈。究竟什么是“长度为20的原始二进制格式”?

3 个答案:

答案 0 :(得分:5)

在这种情况下,“原始二进制”表示原始字节

SHA-1摘要长160位,或20个字节。

许多系统使用ASCII表示格式,即40个十六进制字符,但有时您需要原始数据。

例如,DNSSEC在区域文件中存储签名或显示dig的输出时使用ASCII十六进制,但“在线上”则使用原始格式。

答案 1 :(得分:1)

如果您有以下十六进制字符串:'8A',则需要两个字符,即两个字节。

默认情况下sha1()会返回这种东西 - 当然是40个字符,而不是两个字符。


如果你有138值,它是一个整数,它只占用一个字节的内存 - 但它代表相同的东西,因为整数138是十六进制8A的值

sha1()设置为raw_output时,这是true返回的值,包含20个字节,而不是一个。


使用十六进制字符串表示整数时,需要两个字符来表示0到255之间的值 - 这些值在存储为8位整数时,只需要存储1个字节。

这就是为什么sha1()默认返回的十六进制字符串是40个字节 - 而在另一种情况下返回的整数值只有20个字节。

答案 2 :(得分:1)

  • “原始”输出为20 字节,因此加起来为SHA-1摘要的20 * 8 = 160位。
  • 默认输出为40 字符十六进制数字,其中每个字符代表一个十六进制数字(= 4位),最多也加起来为4 * 40 = 160位。