Расшифровка шифрования с помощью AES Crypto-JS не работает в веб-представлении Android?
В веб-просмотре в моем приложении для Android я пытаюсь выполнить шифрование и дешифрование с помощью 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);
}
результат всегда пуст. Есть ли что-то, что я делаю не так?
1 ответ
The CryptoJS decrypt()
Функция ожидает, что зашифрованный текст будет либо отформатирован в OpenSSL, либо будет специальным объектом.
Единственное значение, которое вам нужно установить для специального объекта, это ciphertext
имущество:
var decrypted = CryptoJS.AES.decrypt({
ciphertext: valueStr
},
key,
{
iv: ivStr,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}
);
Более того, decrypted
это словесный массив Вам нужно использовать stringify()
чтобы получить строку из этого:
var result = CryptoJS.enc.Utf8.stringify(decrypted);