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

时间:2013-12-11 15:09:03

标签: 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.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的情况似乎并非如此?

2 个答案:

答案 0 :(得分:2)

这不能回答实际问题,但请注意,使用SHA3时,您并不需要HMAC哈希值。与SHA1和SHA2以及MD5不同,SHA3 容易受到长度扩展攻击。

因此,使用SHA3,只需在您的输入中添加或附加密钥即可。

或者,如果你是偏执一个哈希步骤变得妥协(在可预见的未来不是预期的,特别是在SHA3中,但仍然是),你可以做一些像SHA3(键+ SHA3(键+数据)) )或SHA3(键+ SHA3(键+数据)+数据)(显然用“+”表示二进制串联)。

答案 1 :(得分:1)

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

  1. 使用文本编辑器打开hmac-sha3.js文件。
  2. 查找" {outputLength:512}"并用" {outputLength:256}"
  3. 替换它

    然后哈希输出的长度为256位。

    为了确保您没有弄乱,请仔细检查您的256位hmac-sha3输出以及互联网上提供的一些测试用例,例如:http://www.di-mgt.com.au/hmac_sha3_testvectors.html