SJCL文档提供以下代码作为 sha256 的示例:
var bitArray = sjcl.hash.sha256.hash("message");
var digest_sha256 = sjcl.codec.hex.fromBits(bitArray);
该示例中的摘要等于 64 个字符的十六进制字符串,而我期望的是 16 个字符的十六进制字符串(256 位 = 16 个十六进制字符)。我错过了什么?如何获得 16 个字符的哈希摘要?
SJCL文档提供以下代码作为 sha256 的示例:
var bitArray = sjcl.hash.sha256.hash("message");
var digest_sha256 = sjcl.codec.hex.fromBits(bitArray);
该示例中的摘要等于 64 个字符的十六进制字符串,而我期望的是 16 个字符的十六进制字符串(256 位 = 16 个十六进制字符)。我错过了什么?如何获得 16 个字符的哈希摘要?
你误会了什么。256 位不等于16 个十六进制数字。
可以这样想:256 位等于 32 字节(一个字节中有 8 位)。一个字节(8 位)可以编码 256 (2^8) 个不同的值。一个十六进制数字(base-16)可以编码 16 个不同的值。如果要将相同数量的值编码为一个字节,您需要多少个十六进制数字?二;两个十六进制数字可以编码 256 个不同的值 (16^2)。所以,如果我们每个字节需要两个十六进制数字,而 256 位等于 32 个字节,那么这意味着我们需要64 个十六进制数字来表示可以存储在 256 位中的信息。
十六进制摘要很好。它应该是 64 个字符。