我已经开始学习一些加密技术,并试图在Angular 7的边项目中实现AES加密。 加密返回密文,但是当我解密密文时,它返回空字符串。 我尝试在互联网上搜索,但找不到任何解决方案,也许有人可以提供帮助。
encryptPasswords(credentials: PasswordData) {
const password = credentials.password;
// msgString is expected to be Utf8 encoded
const key = CryptoJS.enc.Utf8.parse(utilities.localStorageHelper.LowLevelKey);
const iv = CryptoJS.lib.WordArray.random(16);
const encrypted = CryptoJS.AES.encrypt(password, key, {
iv: iv
});
return iv.concat(encrypted.ciphertext).toString(CryptoJS.enc.Base64);
}
decryptPasswords(credentials: PasswordData) {
/*
* Decrypt payload
* @param {string} ciphertextStr - Encrypted Payload
* @return {}
*/
const key = CryptoJS.enc.Utf8.parse(utilities.localStorageHelper.LowLevelKey);
const ciphertext = CryptoJS.enc.Base64.parse(credentials.password);
// split IV and ciphertext
const iv = ciphertext.clone();
iv.sigBytes = 16;
iv.clamp();
ciphertext.words.splice(0, 4); // delete 4 words = 16 bytes
ciphertext.sigBytes -= 16;
// decryption
const decrypted = CryptoJS.AES.decrypt({ ciphertext: ciphertext }, key, {
iv: iv
});
console.log(decrypted);
return decrypted.toString(CryptoJS.enc.Utf8);
}
PS:-我仍在学习,因此可能存在一些愚蠢的错误:P
预先感谢
答案 0 :(得分:0)
我将首先查看以下链接,请注意ciphertext = ....).toString()
encrypt.toString()
会输出已经base64
编码的加密。然后,您会发现它们立即将ciphertext = ....).toString()
的输出传递给解密。
https://github.com/brix/crypto-js#object-encryption
我不确定使用encrypt.ciphertext
会带来什么后果,我个人不使用它,因此我无法对此发表评论……但是我知道以下内容的输出并不相同...这将是需要进一步研究的东西。
console.log(encrypted.toString())
console.log(CryptoJS.enc.Base64.stringify(encrypted.ciphertext))
请注意::我相信解密期望密文是一个base64
字符串...至少在我的应用程序中是这种情况。
我怀疑encrypt.toString()
和CryptoJS.enc.Base64.stringify(encrypted.ciphertext)
可能是您问题的开始...但是从您的连接过程来看,我怀疑那里也可能存在问题。
您每次加密都会生成一个随机的初始化向量,因此应该在其中进行一定的混淆处理...我只需要base64
IV
并将其与诸如{{例如1}} ...这样的事情会使解密阶段的生活变得更轻松,因为将两者隔离开来...与您现在做的事情相比,解决问题也容易得多。
这将导致
:
与iv:ciphertext
分隔符连接 两者:
...如果您有疑虑,则可以base64
将其输出,然后再通过电线进行传输...不是说这样可以确保它的安全性...但是至少成为另一层迷惑。
base64
我要说的是我认为拼接可能是个问题...在控制台日志中查看源和目标...我认为拼接可能需要为btoa(iv)+':'+encrypted.toString()
,因为这4个索引似乎是您想要的那些...但是我还是不太熟悉您如何尝试这部分...所以我会推迟。
我知道这不是复制粘贴解决方案,但我希望这将为您提供足够的信息,使您可以到达所需的位置。
修订
希望这是复制和粘贴...如果可以的话,您可以根据需要进行修改。
splice(4,4)