Я пытаюсь зашифровать серверную часть (криптоод) и расшифровать клиентскую сторону (CryptoJS). Я могу создать ключ, используя cryptoJS, и может шифровать и расшифровывать, когда используется одна и та же отдельная библиотека, но проблема в том, что я не могу шифровать Crypto, но расшифровывать с помощью CryptoJS, который является сценарием реального мира. Ошибок нет, просто пустой ответ.Шифрование Javascript в расшифровке шифрования в CryptoJS
Любая помощь очень ценится пожалуйста!
iv = crypto.randomBytes(16),
orig = 'A confidential message.';
//Crypto JS creates key
var password = "sixteen byte key";
var salt = CryptoJS.lib.WordArray.random(128/8);
var key = CryptoJS.PBKDF2(password, salt, { keySize: 128/32, iterations: 1000 });
console.log("step1 generated key: "+ key);
//Convert key for crypto use - as a Buffer
var hashHex = key.toString(CryptoJS.enc.Hex);
var hash = new Buffer(hashHex,'hex');
//Test encryption and decryption with crypto (Node)
//use CryptoJS key to encrypt data using crypto cipheriv
var cipher2 = crypto.createCipheriv('aes-128-cbc', hash, iv); //iv must be a buffer
var encrypted1 = cipher2.update(orig, 'utf8', 'hex');
var encrypted2 = encrypted1 += cipher2.final('hex');
console.log("Crypto string:", encrypted2.toString());
// Start decrypt
var decipher = crypto.createDecipheriv('aes-128-cbc', hash, iv);
var dec = decipher.update(encrypted2, 'hex', 'utf8')
dec += decipher.final('utf8');
console.log("Crypto decrypted msg:", dec);
//test with crypto JS (ie the client)
//CryptoJS key is a string
var encryptedCJS = CryptoJS.AES.encrypt(orig, key.toString(), { iv: iv, mode: CryptoJS.mode.CBC});
console.log("CryptoJS encrypted: "+encryptedCJS);
var decryptedCryptoJS = CryptoJS.AES.decrypt(encryptedCJS, key.toString(), { mode: CryptoJS.mode.CBC, iv: iv });
console.log("CryptoJS decrypted msg: "+decryptedCryptoJS.toString(CryptoJS.enc.Utf8));
//This part does not work - use message encrypted by crypto but cannot decrypt with CryptoJS. decryptedCryptoJSFinal is empty
var decryptedCryptoJSFinal = CryptoJS.AES.decrypt(encrypted2, key.toString(), {iv: iv, mode: CryptoJS.mode.CBC});
console.log("FINAL CryptoJS decrypted: "+decryptedCryptoJSFinal.toString(CryptoJS.enc.Utf8));
Я думаю, что выход криптографического шифрования должен быть другой формат для вывода шифрования CryptoJS, но я не могу найти эту проблему. В целом я тогда намереваюсь отправлять зашифрованные данные как JSON для дешифрования на клиенте CryptoJS.
FWIW вы можете использовать один и тот же узел 'crypto' API, если вы используете WebPack/browserify/др. – mscdex
@mscdex Хорошее спасибо. FWIW Я хотел использовать другую библиотеку, поскольку на самом деле сервер может быть Java, .Net и т. Д. Кстати, я думаю, что я взломал его, CryptoJS ожидает, что «расшифровка» будет решена, поэтому я думаю, что проблема там есть. Все еще доказательство исправить в мо. – user7239926