javascript - 如何通过浏览器(HTML5) session 变量传递加密数据

标签 javascript html encoding session-variables cryptojs

我正在尝试通过浏览器/客户端 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/

相关文章:

html - 在按钮悬停时更改图像不透明度

javascript - outerHTML 数据不完整

ios - 使用 Swift 的 Encodable 将可选属性编码为 null 而无需自定义编码

javascript - 执行前等待链接点击弹出结果

javascript - svg - 绘制空心矩形(矩形 donut )?

javascript - setInterval 手动设置间隔时间

java - LDAP 错误代码 21 - "and ” 之间的差异

javascript - 是否可以在不重复所述值的情况下从三元运算返回比较值+字符串?

javascript - 在本地存储中存储压缩的 json 数据

java - 从 java Charset 对象获取数字代码页