最近的CryptoJS版本支持SHA3散列。
SHA3可以输出不同的散列大小,包括512位(默认)和256位。这两个工作正常:
var sha3_512_hash = CryptoJS.SHA3( 'test' );
var sha3_256_hash = CryptoJS.SHA3( 'test' , { outputLength:256 } );
同样,CryptoJS也可以计算HMAC值。但是,我无法弄清楚如何更改默认输出大小:
var sha3_512_hmac = CryptoJS.HmacSHA3( 'test' , 'key' );
var sha3_256_hmac = CryptoJS.HmacSHA3( 'test' , 'key' , { outputLength:256 } );
第一个工作正常(结果是512位的hmac值),但第二个是相同的(即也是512位),好像它忽略了{outputLength:256}参数!
以下是一个实例:http://jsfiddle.net/M8xf3/(使用CryptoJS 3.1.2中的hmac-sha3.js)
有谁知道如何创建基于SHA3的256位HMAC哈希?
P.S。对于SHA2系列函数,CryptoJS为每个输出大小(即HmacSHA256和HmacSHA512)分别具有Hmac函数。但是SHA3的情况似乎并非如此?
答案 0 :(得分:2)
这不能回答实际问题,但请注意,使用SHA3时,您并不需要HMAC哈希值。与SHA1和SHA2以及MD5不同,SHA3 不容易受到长度扩展攻击。
因此,使用SHA3,只需在您的输入中添加或附加密钥即可。
或者,如果你是偏执一个哈希步骤变得妥协(在可预见的未来不是预期的,特别是在SHA3中,但仍然是),你可以做一些像SHA3(键+ SHA3(键+数据)) )或SHA3(键+ SHA3(键+数据)+数据)(显然用“+”表示二进制串联)。
答案 1 :(得分:1)
您可以编辑hmac-sha3.js并将outputLength更改为256位而不是512位。
然后哈希输出的长度为256位。
为了确保您没有弄乱,请仔细检查您的256位hmac-sha3输出以及互联网上提供的一些测试用例,例如:http://www.di-mgt.com.au/hmac_sha3_testvectors.html