Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过浏览器(HTML5)会话变量传递加密数据_Javascript_Html_Encoding_Session Variables_Cryptojs - Fatal编程技术网

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

Javascript 如何通过浏览器(HTML5)会话变量传递加密数据,javascript,html,encoding,session-variables,cryptojs,Javascript,Html,Encoding,Session Variables,Cryptojs,我试图通过浏览器/客户端会话变量传递加密数据-不要与服务器端会话变量混淆: 加密: 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); sessionSto

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

加密:

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);
没有错误,但明文是空字符串。

如果我使用
变量
而不是
会话存储
执行完全相同的加密/解密,那么效果很好

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

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

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

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

只是一个快速注释,但您正在执行
CryptoJS.AES.decrypt(encrypted_user_id,…
以获取解密的密码-看起来您解密了错误的变量。@winhowes-不确定您的意思?
加密的_user_id
被传递到会话变量并被检索。
user_id
是使用
密码密钥加密为
加密的_user_id
的原始值使用相同的密钥进行解密。另外,当您从会话中获取
加密的用户id
时,您能否确认您正在获取该id的值?它是否与您存储的值相同?只是试图缩小问题的范围。我的第一条评论:您的最后一行
加密的用户id
应该是
加密的用户id
作战需求文件believe@winhowes-收到了,我已经修复了我的帖子。通常,如果有人强制将
CryptoJS.AES.encrypt(…)
结果转换为类似
“”+CryptoJS.AES.encrypt(…)的字符串
这应该会导致正确的序列化,尝试JSON序列化会立即破坏这一点。上面的fiddle不起作用,我已经更新了CDN及其在本文档中的工作