簡體   English   中英

使用CryptoJS進行漸進式AES解密

[英]Progressive AES decryption with CryptoJS

我嘗試使用CryptoJS的漸進式加密來解密文件。 這些文件使用OpenSSL進行加密和base64編碼,如CryptoJS文檔( CryptoJS )所示。

當我使用CryptoJS.AES.decrypt一切正常時:

var encryptedText = "U2FsdGVkX19X2wD+xFnLd3WLuzW5qA0dppGtV+VPOFdjslLsZpwfdqd02BOe4pvxG2zZok06DchVfZBBBS/JWg==";

var key = CryptoJS.enc.Hex.parse("A6420198998C341308AF100CF7CCAC95884E4084581A4F8CFB8DFA7FEAD045EF");
var iv =  CryptoJS.enc.Hex.parse("7F418B4532F8BC83261639DBA60C0A50");

var decrypted = CryptoJS.AES.decrypt(encryptedText, key, {iv: iv});
var base64 = CryptoJS.enc.Base64.stringify(decrypted);
var result = atob(base64);

但是當我嘗試漸進式解密時,結果已損壞:

var decrypted;
var cipher = CryptoJS.algo.AES.createDecryptor(key, { iv: iv});
decrypted = cipher.process(encryptedText);
decrypted.concat(cipher.finalize());
var base64 = CryptoJS.enc.Base64.stringify(decrypted);
var result = atob(base64);

有誰知道我做錯了什么?

問題是encryptedText是一個OpenSSL格式的字符串。 它不是加密后從ciphertext屬性中獲得的純密ciphertext

var ct = CryptoJS.AES.encrypt(plaintext, key, {iv: iv}).ciphertext;

Cipher.process函數只接受WordArray或數據字符串,encryptedText也不接受。 您需要使用CryptoJS.format.OpenSSL.parse()來檢索密文WordArray

var ct = CryptoJS.format.OpenSSL.parse(encryptedText).ciphertext;

或者在加密時直接檢索ciphertext ,就像在第一個片段中一樣。

之后,您可以:

var decrypted = cipher.process(ct);
decrypted = decrypted.concat(cipher.finalize());

我也不確定為什么你將字符串化為Base64,然后使用atob ,因為有一種更簡單的方法來獲取原始字符串:

console.log(decrypted.toString(CryptoJS.enc.Utf8));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM