【发布时间】:2018-12-02 10:00:05
【问题描述】:
我已经开始学习一些加密的东西,并试图在 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
提前致谢
【问题讨论】:
-
理想的加密应该在服务器端完成。从这个角度来看,如果您想在 node.js 中执行此操作,您可能需要参考这个答案。看懂解释就可以自己调试了:stackoverflow.com/a/53573115/1235935
标签: javascript node.js angular encryption aes