gpt4 book ai didi

javascript - 使用 AES Crypto-JS 进行加密解密在 android webview 中不起作用?

转载 作者:行者123 更新时间:2023-12-02 16:04:38 25 4
gpt4 key购买 nike

在我的 Android 应用程序的 Web View 中,我尝试使用 Crypto-JS 进行加密和解密。加密工作正常,但解密不起作用。我搜索了很多,但找到的解决方案都不适合我。我是 JavaScript 新手。在我的另一个应用程序中,我在 android 中执行此操作并且工作正常。但使用 jquery 解密不起作用。以下是我正在使用的加密函数:

function encryptText(textvalue, key) {
var key = CryptoJS.enc.Utf8.parse(key);
var iv = CryptoJS.lib.WordArray.random(128/8);

var encrypted = CryptoJS.AES.encrypt(textvalue, key,
{
keySize: 128 / 8,
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});

var pass = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
var ivpass = encrypted.iv.toString(CryptoJS.enc.Base64);

return ivpass+pass;
}

它工作正常。以下是我使用的解密函数:

function decryptText(encrypted, keyParam){
var key = CryptoJS.enc.Utf8.parse(keyParam);
var indexOfSeperation = encrypted.indexOf("==");

var iv = encrypted.substring(0, indexOfSeperation+2);
var value = encrypted.substring(indexOfSeperation + 2);
console.log("iv: "+iv);
console.log("value: "+value);

var valueStr = CryptoJS.enc.Base64.parse(value);
var ivStr = CryptoJS.enc.Base64.parse(iv);

var decrypted = CryptoJS.AES.decrypt(valueStr, key,
{
iv: ivStr,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}
);

var result = CryptoJS.enc.Utf8.parse(decrypted);
console.log("result: "+result);
}

结果始终为空。我有什么做错的地方吗?

最佳答案

CryptoJS decrypt() 函数期望密文为 OpenSSL 格式或为特殊对象。

您需要在特殊对象上设置的唯一值是 ciphertext 属性:

var decrypted = CryptoJS.AES.decrypt({
ciphertext: valueStr
},
key,
{
iv: ivStr,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}
);

此外,decrypted 是一个 WordArray。您需要使用 stringify() 从中获取字符串:

var result = CryptoJS.enc.Utf8.stringify(decrypted);

关于javascript - 使用 AES Crypto-JS 进行加密解密在 android webview 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30870556/

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