使用SJCL获取sha256哈希的十六进制表示

And*_*rov 8 javascript hex sjcl

所述SJCL文档提供以下代码作为SHA256一个例子:

var bitArray = sjcl.hash.sha256.hash("message");  
var digest_sha256 = sjcl.codec.hex.fromBits(bitArray);  
Run Code Online (Sandbox Code Playgroud)

当我期待一个16个字符的十六进制字符串(256位= 16个十六进制字符)时,该示例中的摘要等于64个字符的十六进制字符串.我错过了什么?如何获得16个字符的哈希摘要?

voi*_*hos 10

你误会了什么.256位确实等于16个进制数字.

可以这样想:256位等于32字节(一个字节中的8位).一个字节(8位)可以编码256(2 ^ 8)个不同的值.单个十六进制数字(base-16)可以编码16个不同的值.如果要将相同数量的值编码为一个字节,您需要多少个十六进制数字?两个 ; 两个十六进制数字可以编码256个不同的值(16 ^ 2).因此,如果我们每个字节需要两个十六进制数字,并且256位等于32字节,那么这意味着我们需要64个十六进制数字来表示可以以256位存储的信息.

十六进制摘要很好.它应该是64个字符.

  • 哈!我有这种想法,如果谷歌以某种方式将这个问题放在我的名字的结果页面上,那么没有人会再雇用我作为程序员.为了记录,我的原始评论是"正确.我困惑'一个十六进制字符有16个可能的值'与'一个十六进制字符有16位信息'".在我的辩护中,我前一天晚上睡不着觉:) (3认同)