如何在JS中获得CryptoJS.HmacSHA256的摘要表示
How to get digest representation of CryptoJS.HmacSHA256 in JS
我必须在摘要中生成CryptoJS.HmacSHA256
的字符串表示(字节表示)。
我需要它,因为我必须复制在javascript:中生成这样摘要的python代码
print hmac.new("secret", "test", hashlib.sha256).digest()
')�kb��>�y+������:�o��H� '
目标是在javascript中复制上面代码的行为。
你能建议我怎么做吗?
您不能简单地将字节发送到JavaScript。您需要将其转换为文本表示,使其具有可比性。python的hmac模块和CryptoJS都支持十六进制编码。
CryptoJS:
CryptoJS.HmacSHA256("test", "secret").toString(CryptoJS.enc.Hex)
Python 2:
hmac.new("secret", "test", hashlib.sha256).hexdigest()
Python 3:
hmac.new("secret".encode("utf-8"), "test".encode("utf-8"), hashlib.sha256).hexdigest()
请注意参数排序的差异。
全部生产
0329a06b62cd16b33eb6792be8c60b158d89a2ee3a876fce9a881ebb488c0914
如果你需要原始字节,那么CryptoJS似乎不会为它提供代码。有人提到这是因为Uint8Array
和朋友之间缺乏跨浏览器兼容性。
然而,经过搜索,我确实找到了一些由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);
}
};
当然要注意,字节不会直接转换为字符您不能使用文本比较与python生成的')�kb��>�y+������:�oΚ��H� '
进行比较。为此,确实需要一个编码器,如十六进制或64进制。在这种情况下,请看Artjom的答案。
相关文章:
- React中的数据集表示
- 任何将(SSH)终端嵌入到一些HTML5表示系统中的想法(例如,show.js)
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- 如何将Date字段设置为等于另一个Date+Int值,该值表示月份值
- regex表示逗号,后跟空格或仅逗号
- 我将如何将其更改为循环和数组表示法
- 如何使用Undercore和Backbone在HTML中表示模型属性
- 将JSON对象的表示形式更改为显式键/值格式
- 如何在JS中获得CryptoJS.HmacSHA256的摘要表示
- 在javascript中使用方括号表示法的嵌套对象
- 如何在JavaScript中将数字表示为十六进制
- 如何从二进制int中获取百分比,每个位表示x%
- Regex表示10位数字,其中没有't允许所有零、所有单个no和序列号
- 如何避免“;使用数组文字表示法“;以下javascript代码中的jslint错误
- Regex表示8位电话号码(新加坡号码长度)
- 有没有办法在里面看到一个数字'的64位浮点IEEE754表示
- 如何在ember数据模型中表示数组
- 在Javascript中,如何在JSON对象中将1.00表示为数字
- 使用数组表示法对多个字段执行jQuery日期选择器
- JavaScript:用于检索属性值的括号表示法