我正在尝试通过浏览器/客户端会话变量传递加密数据 - 不要与服务器端会话变量混淆:
加密:
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
执行完全相同的加密/解密,则可以正常工作。
我不理解什么?会话变量是否与局部变量不同?
答案 0 :(得分:4)
所以我做了一个fiddle来测试它。我认为问题(虽然公平地说你的原始代码对我来说似乎也适用)是加密你应该这样做:
var encrypted_user_id = CryptoJS.AES.encrypt(user_id, cipher_pass).toString();
为什么呢?如果没有to字符串,您将存储JSON无法序列化的对象,因此当您从会话存储中获取对象时,您将获得与您预期不同的内容。 / p>