它说:
如果可选的raw_output设置为 是的,然后是sha1摘要 以原始二进制格式返回 长度为20,否则退回 value是40个字符的十六进制 号。
对我来说,“二进制格式”是一系列逻辑真值或假值。通常用0和1表示。
如果您有20个并且将它们解释为数字,则您的数字范围为2 ^ 20个。
对于40位十六进制数字,这将是16 ^ 40,比2 ^ 20大约是1,4 * 10 ^ 42倍。
如果var_dump原始输出你只是乱码,如果你bin2hex它们,你最终得到如上所述的如此大的十六进制数。
所以我对这个问题的解释绝对是无稽之谈。究竟什么是“长度为20的原始二进制格式”?
答案 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)