我试图通过浏览器/客户端会话变量传递加密数据 - 不要与服务器端会话变量混淆:
加密:
var encrypted_user_id = CryptoJS.AES.encrypt(user_id, cipher_pass);
var encrypted_user_password = CryptoJS.AES.encrypt(password, cipher_pass);
sessionStorage.setItem('user_id', encrypted_user_id);
sessionStorage.setItem('user_password', encrypted_user_password);
解密:
var encrypted_user_id = sessionStorage.getItem('user_id');
var encrypted_user_password = sessionStorage.getItem('user_password');
var plaintext_user_id = CryptoJS.AES.decrypt(encrypted_user_id, cipher_pass).toString(CryptoJS.enc.Utf8);
var plaintext_user_password = CryptoJS.AES.decrypt(encrypted_user_password, cipher_pass).toString(CryptoJS.enc.Utf8);
没有错误,但明文是空字符串。
如果我使用variables
而不是sessionStorage
执行完全相同的加密/解密,它可以正常工作。
我不明白的是什么?会话变量是否与局部变量不同?
所以我做了一个fiddle来测试它。我认为问题(虽然公平地说你的原始代码对我来说似乎也适用)是加密你应该这样做:
var encrypted_user_id = CryptoJS.AES.encrypt(user_id, cipher_pass).toString();
为什么?如果没有to字符串,那么您将存储JSON无法序列化的对象,因此当您从会话存储中获取对象时,您将收到与您预期不同的内容。