1

最近的 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)

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

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

4

2 回答 2

2

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

因此,使用 SHA3 只需将密钥添加或附加到您的输入中就足够了。

或者,如果您担心单个哈希步骤会受到损害(在可预见的未来不会预料到,尤其是 SHA3,但仍然如此),您可以执行 SHA3(key+SHA3(key+data)) 或 SHA3 之类的操作(key+SHA3(key+data)+data) (显然用“+”表示二进制连接)。

于 2013-12-24T08:07:53.030 回答
1

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

  1. 使用文本编辑器打开 hmac-sha3.js 文件。
  2. 找到“{outputLength:512}”并将其替换为“{outputLength:256}”

那么哈希输出的长度将是 256 位。

为确保您没有搞砸事情,请仔细检查您的 256 位 hmac-sha3 输出与互联网上可用的一些测试用例,例如:http ://www.di-mgt.com.au/hmac_sha3_testvectors.html

于 2014-05-19T16:16:11.427 回答