Hash 如何使用CryptoJS计算256位HMAC_SHA3哈希?

Hash 如何使用CryptoJS计算256位HMAC_SHA3哈希?,hash,sha,hmac,cryptojs,Hash,Sha,Hmac,Cryptojs,最近的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.Hm

最近的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}参数

下面是一个实例:(使用CryptoJS 3.1.2中的hmac-sha3.js)

有人知道如何创建基于256位SHA3的HMAC哈希吗


另外,对于SHA2系列函数,CryptoJS对于每个输出大小都有单独的Hmac函数(即HmacSHA256和HmacSHA512)。但是SHA3似乎不是这样的?

这并不能回答实际问题,但是请注意,对于SHA3,您并不真正需要HMAC哈希。与SHA1、SHA2和MD5不同,SHA3不易受到长度扩展攻击

因此,对于SHA3,只需在输入前加上或附加密钥就足够了


或者,如果您偏执于某个散列步骤被破坏(在可预见的将来这是不可能的,尤其是不使用SHA3,但仍然如此),您可以执行类似SHA3(key+SHA3(key+data))或SHA3(key+SHA3(key+data)+data)的操作(显然用“+”表示二进制连接).

您只需编辑hmac-sha3.js并将outputLength更改为256位而不是512位

  • 使用文本编辑器打开hmac-sha3.js文件
  • 查找“{outputLength:512}”,并将其替换为“{outputLength:256}”
  • 然后散列输出的长度将为256位

    为了确保没有弄糟,请使用internet上的一些可用测试用例仔细检查256位hmac-sha3输出,例如: