【问题标题】:How to calculate a 256-bit HMAC_SHA3 hash with CryptoJS?如何使用 CryptoJS 计算 256 位 HMAC_SHA3 哈希?
【发布时间】:2013-12-11 15:09:02
【问题描述】:

最近的 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 值),但第二个是 same(即也是 512 位),就好像它忽略了 {outputLength:256} 参数!

这是一个实际示例:http://jsfiddle.net/M8xf3/(使用 CryptoJS 3.1.2 中的 hmac-sha3.js)

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

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

【问题讨论】:

    标签: hash sha hmac cryptojs


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2018-06-07
        • 2012-06-15
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 2019-07-21
        • 2011-11-02
        • 2018-10-08
        • 2016-06-23
        相关资源
        最近更新 更多