cookie保存用户状态后如何加密cookie保证信息不被窃取?

xyzhuzhou 2013-10-18 08:58:34

如题,当用到保存用户登录状态的时候 往往会选择利用cookie保存用户的登录信息 但是一旦别人获取到了你的cookie信息后 就可能利用cookie登录账号,这个应该如何处理?求解!!!
...全文
8517 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
_小黑_ 2013-10-18
  • 打赏
  • 举报
回复
你可以 研究 一下 csdn 的自动 登陆
申江渔夫 2013-10-18
  • 打赏
  • 举报
回复
引用 7 楼 xyzhuzhou 的回复:
[quote=引用 6 楼 sjyforg 的回复:] cookie加密。 如果对方能够搞到你本机的cookie,那你根本没什么秘密可言。
同意 请问有什么办法吗?尽量避免的 因为要做记住密码和下次自动登录这样的功能 必须要用到cookie来保存用户状态![/quote] 如果是共用的机器,只能做好用户权限控制,不要用administrator权限,限制每个用户只能访问各自的文件目录,这样就能隔离cookie了。
H_Gragon 2013-10-18
  • 打赏
  • 举报
回复
引用 3 楼 liuchaolin 的回复:
#region 加密&解密 /// <summary> /// DES对称加密方法 /// </summary> /// <param name="InitData">原始待加密数据</param> /// <param name="SecretKey">加密密钥</param> public static string EncryptData(object InitData, string SecretKey) { try { string newSecretKey = Utils.MD5(SecretKey + MySecretKey).Substring(16, 8); DESCryptoServiceProvider des = new DESCryptoServiceProvider(); //把字符串放到byte数组中 Byte[] inputByteArray = Encoding.Default.GetBytes(InitData.ToString()); //建立加密对象的密钥和偏移量 des.Key = ASCIIEncoding.ASCII.GetBytes(newSecretKey); //原文使用ASCIIEncoding.ASCII方法的GetBytes方法 des.IV = ASCIIEncoding.ASCII.GetBytes(newSecretKey); //使得输入密码必须输入英文文本 MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); StringBuilder ret = new StringBuilder(); foreach (Byte b in ms.ToArray()) { ret.AppendFormat("{0:X2}", b); } ret.ToString(); return ret.ToString(); } catch { return ""; } } /// <summary> /// DES对称解密方法 /// </summary> /// <param name="EncryptedData">待解密数据</param> /// <param name="SecretKey">解密密钥</param> public static string DecryptData(object EncryptedData, string SecretKey) { try { string newSecretKey = Utils.MD5(SecretKey + MySecretKey).Substring(16, 8); string pToDecrypt = EncryptedData.ToString(); DESCryptoServiceProvider des = new DESCryptoServiceProvider(); Byte[] inputByteArray = new byte[pToDecrypt.Length / 2]; for (int x = 0; x < pToDecrypt.Length / 2; x++) { int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16)); inputByteArray[x] = (byte)i; } //建立加密对象的密钥和偏移量,此值重要,不能修改 des.Key = ASCIIEncoding.ASCII.GetBytes(newSecretKey); des.IV = ASCIIEncoding.ASCII.GetBytes(newSecretKey); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); return System.Text.Encoding.Default.GetString(ms.ToArray()); } catch { return ""; } } #endregion Utils.MD5(SecretKey + MySecretKey).Substring(16, 8); 这里的MD5自己写一个,然后随意截取其中8位,MySecretKey=内部密钥
同意!
xyzhuzhou 2013-10-18
  • 打赏
  • 举报
回复
引用 6 楼 sjyforg 的回复:
cookie加密。 如果对方能够搞到你本机的cookie,那你根本没什么秘密可言。
同意 请问有什么办法吗?尽量避免的 因为要做记住密码和下次自动登录这样的功能 必须要用到cookie来保存用户状态!
申江渔夫 2013-10-18
  • 打赏
  • 举报
回复
cookie加密。 如果对方能够搞到你本机的cookie,那你根本没什么秘密可言。
Teln_小凯 2013-10-18
  • 打赏
  • 举报
回复
放在客户端的东西 不安全 吧用户登陆信息写在全局缓存里面,通过用户名+密码 生成的key保证唯一
Teln_小凯 2013-10-18
  • 打赏
  • 举报
回复
写到缓存里面?这样他也就获取不到了
md5e 2013-10-18
  • 打赏
  • 举报
回复
#region 加密&解密 /// <summary> /// DES对称加密方法 /// </summary> /// <param name="InitData">原始待加密数据</param> /// <param name="SecretKey">加密密钥</param> public static string EncryptData(object InitData, string SecretKey) { try { string newSecretKey = Utils.MD5(SecretKey + MySecretKey).Substring(16, 8); DESCryptoServiceProvider des = new DESCryptoServiceProvider(); //把字符串放到byte数组中 Byte[] inputByteArray = Encoding.Default.GetBytes(InitData.ToString()); //建立加密对象的密钥和偏移量 des.Key = ASCIIEncoding.ASCII.GetBytes(newSecretKey); //原文使用ASCIIEncoding.ASCII方法的GetBytes方法 des.IV = ASCIIEncoding.ASCII.GetBytes(newSecretKey); //使得输入密码必须输入英文文本 MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); StringBuilder ret = new StringBuilder(); foreach (Byte b in ms.ToArray()) { ret.AppendFormat("{0:X2}", b); } ret.ToString(); return ret.ToString(); } catch { return ""; } } /// <summary> /// DES对称解密方法 /// </summary> /// <param name="EncryptedData">待解密数据</param> /// <param name="SecretKey">解密密钥</param> public static string DecryptData(object EncryptedData, string SecretKey) { try { string newSecretKey = Utils.MD5(SecretKey + MySecretKey).Substring(16, 8); string pToDecrypt = EncryptedData.ToString(); DESCryptoServiceProvider des = new DESCryptoServiceProvider(); Byte[] inputByteArray = new byte[pToDecrypt.Length / 2]; for (int x = 0; x < pToDecrypt.Length / 2; x++) { int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16)); inputByteArray[x] = (byte)i; } //建立加密对象的密钥和偏移量,此值重要,不能修改 des.Key = ASCIIEncoding.ASCII.GetBytes(newSecretKey); des.IV = ASCIIEncoding.ASCII.GetBytes(newSecretKey); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); return System.Text.Encoding.Default.GetString(ms.ToArray()); } catch { return ""; } } #endregion Utils.MD5(SecretKey + MySecretKey).Substring(16, 8); 这里的MD5自己写一个,然后随意截取其中8位,MySecretKey=内部密钥
xyzhuzhou 2013-10-18
  • 打赏
  • 举报
回复
引用 1 楼 qq873113580 的回复:
保存cookie的时候加密 也就是cookie保存的是一段密文 别然看到也看不出来啥
如果他直接获取了我的cookie的话 他应该不需要知道cookie的内容 他只要在他的浏览器上打开我的网站 然后将他获得的cookie导入进去 也就相当于自动登录到网站了。。。 他获取到cookie后不一定非要知道内容是什么。。。
Teln_小凯 2013-10-18
  • 打赏
  • 举报
回复
保存cookie的时候加密 也就是cookie保存的是一段密文 别然看到也看不出来啥

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧