如何将二进制字符串传递到`btoa`以对原始值进行编码

问题描述 投票:0回答:1

我需要修改此(工作)代码,并用本机JS替换CryptoJS函数。

变量b64encoded具有正确的值,但我尝试使用本机代码(encodedIncorrect)却没有。您可以帮助输入btoa正确的输入吗?

正在运行,但是第三方库不能在我正在开发的平台上使用:

const encrypted = CryptoJS.HmacSHA1("message", "secret");
// encrypted = "0caf649feee4953d87bf903ac1176c45e028df16" << Hexadecimal encoded string
const b64encoded = CryptoJS.enc.Base64.stringify(encrypted);
// b64encoded = "DK9kn+7klT2Hv5A6wRdsReAo3xY="

无效,特别是btoa对二进制字符串的编码]

const encrypted_vendor = VENDOR.hmacSHA1("message", "secret") // Vendor-provided HMAC-SHA1 func
// encrypted_vendor = "0caf649feee4953d87bf903ac1176c45e028df16"

// Split hex string into two-character byte representations for binary conversion
function splitHex(hexString) {
    let chunks = [];
    for (var i = 0, charsLength = hexString.length; i < charsLength; i += 2) {
        chunks.push(hexString.substring(i, i + 2));
    }
}
// Convert hex characters to binary value
function hexCharToBinary(value) {
    return (parseInt(value, 16).toString(2)).padStart(8, '0');
}

binaryChunks = splitHex(encrypted)
var binaryStr = ""
binaryChunks.forEach(i => binaryStr += hexCharToBinary(i))
// binaryStr = "0000110010101111011001001001111111101110111001001001010100111101100001111011111110010000001110101100000100010111011011000100010111100000001010001101111100010110"
encodedIncorrect = btoa(binaryStr)
// encodedIncorrect = "MDAwMDExMDAxMDEwMTExMTAxMTAwMTAwMTAwMTExMTExMTEwMTExMDExMTAwMTAwMTAwMTAxMDEwMDExMTEwMTEwMDAwMTExMTAxMTExMTExMDAxMDAwMDAwMTExMDEwMTEwMDAwMDEwMDAxMDExMTAxMTAxMTAwMDEwMDAxMDExMTEwMDAwMDAwMTAxMDAwMTEwMTExMTEwMDAxMDExMA=="

我还使用此站点(https://cryptii.com/pipes/binary-to-base64)验证了二进制输出是正确的,当设置为二进制输入时,该站点将其编码为正确的base64。

我需要修改此(工作)代码,并用本机JS替换CryptoJS函数。变量b64encoded具有正确的值,但是我尝试使用本机代码(encodedIncorrect)却没有。你可以...

javascript cryptography cryptojs
1个回答
1
投票

您正在编码二进制数字的字符串表示形式,而不是实际数据。

© www.soinside.com 2019 - 2024. All rights reserved.