我打算使用此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 =
通过节点中的HMAC算法传递相同的计数器和密钥时,我得到的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类等效的任何东西,因此可能是缺少的链接。
通过选择算法Sha-256并输入解密的Mac密钥和计数器,我还可以使用此https://quickhash.com/生成与程序相同的值。
您忘记了decryptedMacKey
从Base 64表示形式解码:
var hash = crypto.createHmac('SHA256', new Buffer(decryptedMacKey, 'base64'))
.update(new Buffer(counter.toString(),'utf8'),'utf8')
.digest('base64');
给出:
'Qze5cHfTOjNqwmSSEOd9nEISOobheV833AncGJLin9Y ='
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句