我正在尝试通过浏览器/客户端 session 变量传递加密数据 - 不要与服务器端 session 变量混淆:
加密:
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
执行完全相同的加密/解密,它工作正常。
我不明白什么? session 变量与局部变量有什么不同吗?
最佳答案
所以我做了一个 fiddle测试一下。而且我认为问题(尽管公平地说,您的原始代码似乎也对我有用)是对于加密,您应该改为这样做:
var encrypted_user_id = CryptoJS.AES.encrypt(user_id, cipher_pass).toString();
为什么?如果没有 to 字符串,您将存储一个 JSON 无法序列化的对象,因此当您从 session 存储中取回对象时,您将取回与预期不同的内容。
关于javascript - 如何通过浏览器(HTML5) session 变量传递加密数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36874335/