js怎么实现hmacsha256_如何获取CryptoJS.HmacSHA256在JS中的摘要表示

本文档介绍了如何在JavaScript中使用CryptoJS库生成HMAC-SHA256的字节表示,以匹配Python代码中的行为。提供了Vincenzo Ciancia的转换代码,将WordArray转换为Uint8Array,同时警告了字节与字符之间的不直接对应性,建议使用如十六进制或Base64编码进行比较。
摘要由CSDN通过智能技术生成

I have to generate string representation of CryptoJS.HmacSHA256 in digest (bytes representation).

I need it because i have to duplicate python code which generate such digest in javascript:

print hmac.new("secret", "test", hashlib.sha256).digest()

')�kb��>�y+������:�o��H� '

The goal is to duplicate behaviour of code above in javascript.

Could you please suggest me how to do this?

解决方案

If you need raw bytes then CryptoJS does not seem to supply code for it. It is mentioned that this is because of lack of cross browser compatibility for Uint8Array and friends.

However, after searching, I did find some conversion code created by Vincenzo Ciancia:

CryptoJS.enc.u8array = {

/**

* Converts a word array to a Uint8Array.

*

* @param {WordArray} wordArray The word array.

*

* @return {Uint8Array} The Uint8Array.

*

* @static

*

* @example

*

* var u8arr = CryptoJS.enc.u8array.stringify(wordArray);

*/

stringify: function (wordArray) {

// Shortcuts

var words = wordArray.words;

var sigBytes = wordArray.sigBytes;

// Convert

var u8 = new Uint8Array(sigBytes);

for (var i = 0; i < sigBytes; i++) {

var byte = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;

u8[i]=byte;

}

return u8;

},

/**

* Converts a Uint8Array to a word array.

*

* @param {string} u8Str The Uint8Array.

*

* @return {WordArray} The word array.

*

* @static

*

* @example

*

* var wordArray = CryptoJS.enc.u8array.parse(u8arr);

*/

parse: function (u8arr) {

// Shortcut

var len = u8arr.length;

// Convert

var words = [];

for (var i = 0; i < len; i++) {

words[i >>> 2] |= (u8arr[i] & 0xff) << (24 - (i % 4) * 8);

}

return CryptoJS.lib.WordArray.create(words, len);

}

};

Note of course that bytes don't translate directly to characters; you cannot use a text compare to compare against ')�kb��>�y+������:�o��H� ' generated by python. For that you do need an encoder such as hexadecimals or base 64.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值