如何通过浏览器(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 无法序列化的对象,因此当您从会话存储中取回对象时,您将取回与预期不同的东西。
我正在尝试通过 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 无法序列化的对象,因此当您从会话存储中取回对象时,您将取回与预期不同的东西。