gpt4 book ai didi

java - 将 HMAC 函数从 Java 转换为 JavaScript

转载 作者:行者123 更新时间:2023-11-29 03:02:10 25 4
gpt4 key购买 nike

我打算使用这个 Java 函数作为引用在 NodeJS 中实现一个 HMAC 函数:

private static String printMacAsBase64(byte[] macKey, String counter) throws Exception {
// import AES 128 MAC_KEY
SecretKeySpec signingKey = new SecretKeySpec(macKey, "AES");

// create new HMAC object with SHA-256 as the hashing algorithm
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(signingKey);

// integer -> string -> bytes -> encrypted bytes
byte[] counterMac = mac.doFinal(counter.getBytes("UTF-8"));

// base 64 encoded string
return DatatypeConverter.printBase64Binary(counterMac);
}

从这里我得到 Qze5cHfTOjNqwmSSEOd9nEISOobheV833AncGJLin9Y= 的 HMAC=

当通过 Node 中的 HMAC 算法传递相同的计数器和 key 时,我得到了不同的 HMAC 值。这是我生成 hmac 的代码。

var decryptedMacKey = 'VJ/V173QE+4CrVvMQ2JqFg==';
var counter = 1;

var hash = crypto
.createHmac('SHA256',decryptedMacKey)
.update(new Buffer(counter.toString(),'utf8'),'utf8')
.digest('base64');

当我运行它时,我得到一个 MAC 为 nW5MKXhnGmgpYwV0qmQtkNBDrCbqQWQSkk02fiQBsGU=

我无法在 javascript 中找到任何与 SecretKeySpec 类等效的东西,所以这可能是缺失的链接。

我还能够使用它生成与我的程序相同的值 https://quickhash.com/通过选择算法 Sha-256 并输入解密的 mac key 和计数器。

最佳答案

您忘记从 Base 64 表示中解码 decryptedMacKey:

var hash = crypto.createHmac('SHA256', <strong>new Buffer(decryptedMacKey, 'base64')</strong>)
.update(new Buffer(counter.toString(),'utf8'),'utf8')
.digest('base64');

给出:

'Qze5cHfTOjNqwmSSEOd9nEISOobheV833AncGJLin9Y='

关于java - 将 HMAC 函数从 Java 转换为 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34170236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com