如何通过浏览器(HTML5)会话变量传递加密数据

How to pass encrypted data via browser (HTML5) session variable

我正在尝试通过 browser/client 会话变量 传递加密数据 - 不要与 服务器端会话变量[=30 混淆=]:

加密:

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 执行完全相同的 encryption/decryption,它工作正常。

我有什么不明白的?会话变量是否与局部变量不同?

所以我做了一个 fiddle 来测试一下。我认为问题(尽管公平地说,您的原始代码似乎也对我有用)是对于加密,您应该改为这样做:

var encrypted_user_id = CryptoJS.AES.encrypt(user_id, cipher_pass).toString();

为什么?如果没有 to 字符串,您将存储一个 JSON 无法序列化的对象,因此当您从会话存储中取回对象时,您将取回与预期不同的东西。