gpt4 book ai didi

javascript - 使用 CryptoJS 将 64 位数字字符串转换为字数组

转载 作者:行者123 更新时间:2023-12-03 09:20:54 25 4
gpt4 key购买 nike

我想知道带有整数数据的字符串是否可以正确转换为CryptoJS字数组?例子。我可以将“175950736337895418”转换为字数组,就像我可以从 175950736337895418 (int 值)创建字数组一样。

我有一些代码可以将整数值转换为单词数组

 // Converts integer to byte array
function getInt64Bytes( x ){
var bytes = [];
for(var i = 7;i>=0;i--){
bytes[i] = x & 0xff;
x = x>>8;
}
return bytes;
}

//converts the byte array to hex string
function bytesToHexStr(bytes) {
for (var hex = [], i = 0; i < bytes.length; i++) {
hex.push((bytes[i] >>> 4).toString(16));
hex.push((bytes[i] & 0xF).toString(16));
}
return hex.join("");
}

// Main function to convert integer values to word array
function intToWords(counter){
var bytes = getInt64Bytes(counter);
var hexstr = bytesToHexStr(bytes);
var words = CryptoJS.enc.Hex.parse(hexstr);
return words;
}

即使此代码也无法正常工作,因为非常大的整数(超出数字 2^53 - 1 的 javascript 限制)会被四舍五入。因此,我想要一个可以将整数值作为字符串并将其正确转换为单词数组的解决方案。

PS。我需要这个字数组来使用以下代码计算 HMAC 值

CryptoJS.HmacSHA512(intToWords(counter), CryptoJS.enc.Hex.parse(key))

最佳答案

您想要的是从字符串中解析大数字。由于这对于 RSA 是必需的,因此您可以使用 Tom Wu 的 JSBN 来获得该功能。请务必包含 jsbn.js jsbn2.js。然后你可以像这样使用它:

function intToWords(num, lengthInBytes) {
var bigInt = new BigInteger();
bigInt.fromString(num, 10); // radix is 10
var hexNum = bigInt.toString(16); // radix is 16

if (lengthInBytes && lengthInBytes * 2 >= hexNum.length) {
hexNum = Array(lengthInBytes * 2 - hexNum.length + 1).join("0") + hexNum;
}

return CryptoJS.enc.Hex.parse(hexNum);
}

var num = "175950736337895418";
numWords = intToWords(num);

document.querySelector("#hexInt").innerHTML = "hexNum: " + numWords.toString();
document.querySelector("#hexIntShort").innerHTML = "hexNumShort: " + intToWords("15646513", 8).toString();

var key = CryptoJS.enc.Hex.parse("11223344ff");

document.querySelector("#result").innerHTML = "hexHMAC: " +
CryptoJS.HmacSHA512(numWords, key).toString();
<script src="https://cdn.rawgit.com/jasondavies/jsbn/master/jsbn.js"></script>
<script src="https://cdn.rawgit.com/jasondavies/jsbn/master/jsbn2.js"></script>
<script src="https://cdn.rawgit.com/CryptoStore/crypto-js/3.1.2/build/rollups/hmac-sha512.js"></script>
<div id="hexInt"></div>
<div id="hexIntShort"></div>
<div id="result"></div>

如果您需要特定长度的结果,则可以将所需的字节数作为第二个参数传递。

关于javascript - 使用 CryptoJS 将 64 位数字字符串转换为字数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31841942/

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