如何通过浏览器(HTML5)会话变量传递加密数据 [英] How to pass encrypted data via browser (HTML5) session variable

查看:379
本文介绍了如何通过浏览器(HTML5)会话变量传递加密数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to pass encrypted data via a browser/client session variable - not to be confused with server-side session variable:

加密:

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);

没有错误,但明文是空字符串。

如果我使用变量而不是 sessionStorage 它工作正常。

If I perform the exact same encryption/decryption using variables instead of sessionStorage it works fine.

我不明白什么?有一些与局部变量不同的会话变量吗?

What am I not understanding? Is there something about session variables that is different than a local variable?

推荐答案

所以我做了一个小提琴进行测试。而且我认为这个问题(尽管你的原始代码似乎对我来说也是合适的),但是你需要这样做:

So I've made a fiddle to test it out. And I think the problem (although in fairness your original code seemed to work for me too) is that for the encryption you should do this instead:

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

为什么?没有to字符串,你正在存储一个JSON不能序列化的对象,所以当你从对话存储中取回对象时,你会收到与你想要的不同的东西。

Why? Without the to string, you're storing an object that JSON can't serialize, so when you're getting your object back from session storage you're getting back something different than you intended.

这篇关于如何通过浏览器(HTML5)会话变量传递加密数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆