У меня есть зашифрованные данные из серверной части, работающей на node.js, с использованием шифрования. Я пытаюсь расшифровать их в своем приложении Cordova с помощью CryptoJS, но безуспешно. Я написал простой код для тестирования в онлайн-песочнице Node JS, где использую обе библиотеки. Вот мой код:
const crypto = require('crypto');
const CryptoJS = require('crypto-js');
const algorithm = 'aes-256-cbc';
const key = '01234567890123456789012345678901';
const iv = crypto.randomBytes(16);
const text = 'This is secure text';
const cipher = crypto.createCipheriv(algorithm, key, iv);
const encrypted = Buffer.concat([cipher.update(Buffer.from(text)), cipher.final()]).toString('base64');
const ciphertext = Buffer.from(encrypted, 'base64');
const decrypted = CryptoJS.AES.decrypt(ciphertext, CryptoJS.enc.Utf8.parse(key), {
mode: CryptoJS.mode.CBC,
iv: CryptoJS.enc.Hex.parse(iv.toString('hex')),
}).toString(CryptoJS.enc.Utf8);
console.info(decrypted);
Я пробовал несколько вариантов кодировки ключей и данных (Utf8, Hex).





Кажется, использование CryptoJS.lib.CipherParams в качестве первого аргумента функции decrypt решает проблему.
Попробуй это
const crypto = require("crypto");
const CryptoJS = require("crypto-js");
const algorithm = "aes-256-cbc";
const key = "01234567890123456789012345678901";
const iv = crypto.randomBytes(16);
const text = "This is secure text";
const cipher = crypto.createCipheriv(algorithm, key, iv);
const encrypted = Buffer.concat([
cipher.update(Buffer.from(text)),
cipher.final(),
]).toString("base64");
const ciphertext = CryptoJS.enc.Base64.parse(encrypted); // Create the WordArray object
const decrypted = CryptoJS.AES.decrypt(
{ ciphertext }, // Put a CypherParams instead of a plain string
CryptoJS.enc.Utf8.parse(key),
{
mode: CryptoJS.mode.CBC,
iv: CryptoJS.enc.Hex.parse(iv.toString("hex")),
}
).toString(CryptoJS.enc.Utf8);
console.info(decrypted);
CryptoJS.AES.decrypt()требует зашифрованный текст в качествеCipherParamsобъекта. Альтернативно, зашифрованный текст может быть передан в кодировке Base64 (затем он неявно преобразуется в объектCipherParams). Поэтому возможное исправление:const decrypted = CryptoJS.AES.decrypt(encrypted,...