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

问题描述 投票:2回答:1

我试图通过浏览器/客户端会话变量传递加密数据 - 不要与服务器端会话变量混淆:

加密:

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执行完全相同的加密/解密,它可以正常工作。

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

javascript html5 encoding session-variables cryptojs
1个回答
4
投票

所以我做了一个fiddle来测试它。我认为问题(虽然公平地说你的原始代码对我来说似乎也适用)是加密你应该这样做:

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

为什么?如果没有to字符串,那么您将存储JSON无法序列化的对象,因此当您从会话存储中获取对象时,您将收到与您预期不同的内容。

© www.soinside.com 2019 - 2024. All rights reserved.