使用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
属性获得的纯密文:
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));
相关文章:
- AES-CTR 在 Go 中加密,在 CryptoJS 中解密
- react本机AES加密匹配Java解密算法
- 使用CryptoJS进行渐进式AES解密
- javascript中的AES加密和java中的解密
- 如何在CryptoJS(nodejs/web浏览器)中解密AES 128
- 在Visual Basic中加密AES,然后在服务器到客户端中解密AES
- Node.js对外部PHP aes-256-cbc进行解密,然后对其进行加密
- AES JavaScript加密和Java解密
- 创建 CryptoJS AES 密码加密器以在 .NET 中解密
- CryptoJS AES CBC 256 解密在明文中间添加了额外的字节
- AES解密在伪造中失败,但在crypto-js中工作
- CryptoJS AES加密和JAVA AES解密值不匹配
- NodeJS aes解密不工作
- 将AES解密从CryptoJS移植到Php
- 将AES解密从CryptoJS移植到PyCrypto
- 使用CryptoJS使用密码进行AES解密会返回一个空值
- cryptojs . aes .解密失败原因
- 加密Aes解密在php不工作
- 如何使用CryptoJS AES解密消息.我有一个Ruby的例子
- 如何使用Python对用Javascript加密的数据进行AES解密