所有需要账户登录的website 基本都会想到这样一个问题, 如何保持用户在一定时间内登录有效。
最近本人就在项目中遇到这样的需求,某些页面只能Admin账户登录后访问, 当登录Admin账户后如何才能保持登录信息呢?
用Cookie或者Session来保存登录信息已经是一种比较成熟的技术。但是对于账户信息如果把明文放在Cookie里面显然是非常危险的。
今天给大家分享一下自己在项目中用到的一些加密解密技术。
Cookie 是以key-value的形式存数据。对于账户信息而言最简单的是 UserName 和 Password
如果以明文的形式放到Cookie 比如
UserName=fakeUser
Password=fakePsd
考虑到安全性的问题,显然没有任何website会这样做。
那么是否可以把这几个字段都加密呢?
对 Key 的加密
对key字段像UserName, Password只需要在Server端加密并保存即可,甚至都无需还原成明文。
例如计算出UserName 和 Password的 MD5 hash 值,Cookie形式就可以表示成
ee11cbb19052e40b07aac0ca060c23ee=fakeUser
5f4dcc3b5aa765d61d8327deb882cf99=fakePsd
相比没有加密前安全性是不是高了那么一点点,但这肯定还是不够。我们最终的目标是对所有字段加密。
对Value的加密
对value字段加密就不能是单向的,试想一下如果在Server端对用户名加密放到Cookie再传到Client端, 看起来OK. 当Client端的cookie再传回Server端时,如果不能解密Encode后的用户名那么Cookie就等于失效了。
一个非常简单的算法就是用过异或来实现加密解密,比如提供一个秘钥 X,
encode_data = data ^ X
decode_data = encode_data ^ X
则 data == decode_data.
目前 .NET 提供不了不少对称加密算法都直接以dll 的形式给出了。.NET 中提供的对称加密算法都继承基类SymmetricAlgorithm
具体代码可以直接调用他们的子类像
MSDN 上已经提供了的代码案例,这里就不再给出Test Sample.
为了能够灵活的运用到项目中本人就封装了一些接口
最后可以这样调用
最后Cookie形式就可以表示成
ee11cbb19052e40b07aac0ca060c23ee=EgkCFnUaFlI
5f4dcc3b5aa765d61d8327deb882cf99=vDwCZGvezDfudh91hRsiow
Original: https://www.cnblogs.com/VectorZhang/p/5425283.html
Author: 禅宗花园…迷失的佛
Title: 保存登录信息的Cookie加密技术
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/572578/
转载文章受原作者版权保护。转载请注明原作者出处!