简体   繁体   English

AES 解密不适用于crypto.js

[英]AES decryption not working with crypto.js

i am trying to get decrypted data with crypto-js but getting blank.我正在尝试使用加密 js 获取解密数据,但结果为空白。 while same keys works online aes decryption.而相同的密钥可以在线进行 aes 解密。

var CryptoJS = require("crypto-js"); 
var key = '+MbQeThVmYq3t6w9z$C&F)J@NcRfUjXn';
var iv = '5ty76ujie324$567';
var encdata = 'ad06c28a5c9d933bc73451f86fcaa69a';
cipher = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(encdata))
var decrypt = CryptoJS.AES.decrypt(cipher, Buffer.from(key), {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});

var ddd = decrypt.toString(CryptoJS.enc.Utf8);
console.log(ddd,"hey");

unable to understand why it is behaving like this.无法理解为什么它会这样。 but if i use crypto it is working with below code但如果我使用加密,它可以使用下面的代码

var crypto = require("crypto");
 let encryptedText = Buffer.from(encdata, 'hex');
        let decipher = crypto.createDecipheriv('aes-256-cbc', Buffer.from(key), iv);
        let decrypted = decipher.update(encryptedText);
        decrypted = Buffer.concat([decrypted, decipher.final()]);
       console.log(decrypted.toString());

Key and IV must be passed as WordArray -objects (and not as strings or NodeJS-buffer) [1] . Key 和 IV 必须作为WordArray对象(而不是字符串或 NodeJS 缓冲区) [1]传递。 Since both are specified as UTF8-strings, they can be converted into WordArray -objects with the corresponding UTF8-encoder ( CryptoJS.enc.Utf8.parse(...) ) [2] :由于两个被指定为UTF8串,它们可以被转换成WordArray -objects与相应UTF8编码器( CryptoJS.enc.Utf8.parse(...) [2] :

 var key = CryptoJS.enc.Utf8.parse('+MbQeThVmYq3t6w9z$C&F)J@NcRfUjXn'); // Key: Use a WordArray-object instead of a UTF8-string / NodeJS-buffer var iv = CryptoJS.enc.Utf8.parse('5ty76ujie324$567'); // IV: Use a WordArray-object instead of a UTF8-string var encdata = 'ad06c28a5c9d933bc73451f86fcaa69a'; var cipher = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(encdata)); var decrypt = CryptoJS.AES.decrypt(cipher, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); var decrypted = decrypt.toString(CryptoJS.enc.Utf8); console.log(decrypted);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script>

Note that the ciphertext is usually passed as CipherParams -object [1] .请注意,密文通常作为CipherParams [1]传递。 Alternatively, it can be passed as a string (like in this example), which is then implicitly converted into a CipherParams -object with a definable format strategy (by default, a Base64 encoded string is expected).或者,它可以作为字符串传递(如本例中),然后将其隐式转换为具有可定义格式策略的CipherParams (默认情况下,需要 Base64 编码的字符串)。

The decryption returns a WordArray to be converted into a UTF8-string [4] :解密返回要转换为 UTF8 字符串[4]WordArray

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM