提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|其它|编辑:郝浩|2010-09-19 11:49:33.000|阅读 531 次
概述:本文主要讲解如何用ASP.NET加密Cookie数据的问题,希望对大家有用。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
Cookie确实在WEB应用方面为访问者和编程者都提供了方便,然而从安全方面考虑是有问题的,首先,Cookie数据包含在HTTP请求和响应的包头里透明地传递,也就是说聪明的人是能清清楚楚看到这些数据的。其次,Cookie数据以Cookie文件格式存储在浏览者计算机的cache目录里,其中就包含有关网页、密码和其他用户行为的信息,那么只要进入硬盘就能打开Cookie文件。图1是一个Cookie文件的内容:
如果你未曾留意你的机器里有Cookie文件,可以按下列方法查看:打开IE,选择“工具”菜单里的“Internet选项”,然后在弹出的对话框里点击“设置”按钮,在设置对话框里点击“查看”钮,就会打开一个窗口显示浏览器放在硬盘里的所有缓存数据,其中就有大量的Cookie文件。
所以奉劝大家不要将敏感的用户数据存放在Cookie中,要么就通过加密将这些数据保护起来。在以前的ASP版本中没有加密的功能,现在.NET构架在System.Security.Cryptography命名空间里提供了许多加密类可以利用。
一、.NET的密码系统概要
简单地说,加密就是将原始字符(字节)串转变为完全不同的字符串的处理过程,达到原始字符无法破译的目的。这个处理过程是用另一个字符串(称为“密钥”),采取复杂的、混合的算法,“捣进”原始字符串。有时还使用一个称为“初始向量”的字符串,在密钥捣进之前先打乱目标字符串,预防目标字符串中较明显的内容被识破。加密的功效取决于所用密钥的大小,密钥越长,保密性越强。典型的密钥长度有64位、128位、192位、256位和512位。攻击者唯一的方法是创建一个程序尝试每一个可能的密钥组合,但64位密钥也有72,057,594,037,927,936种组合。
目前有两种加密方法:对称加密(或称私有密钥)和非对称加密(或称公共密钥)。对称加密技术的数据交换两边(即加密方和解密方)必须使用一个保密的私有密钥。非对称加密技术中,解密方向加密方要求一个公共密钥,加密方在建立一个公共密钥给解密方后,用公共密钥创建唯一的私有密钥。加密方用私有密钥加密送出的信息,对方用公共密钥解密。保护HTTP传输安全的SSL就是使用非对称技术。
我们对Cookie数据的加密采取对称加密法。.NET构架从基本的SymmetricAlgorithm类扩展出来四种算法:
·System.Security.Cryptography.DES
·System.Security.Cryptography.TripleDES
·System.Security.Cryptography.RC2
·System.Security.Cryptography.Rijndael
下面将示范DES和TripleDES算法。DES的密钥大小限制在64位,但用于Cookie的加密是有效的。TripleDES完成了三次加密,并有一个较大的密钥位数,所以它更安全。使用那一种算法不仅要考虑加密强度,还要考虑Cookie的大小。因为加密后的Cookie数据将变大,并且,密钥越大,加密后的数据就越大,然而Cookie数据的大小限制在4KB,这是一个必须考虑的问题。再者,加密的数据越多或算法越复杂,就会占有更多的服务器资源,进而减慢整个站点的访问速度。
二、创建一个简单的加密应用类
.NET的所有加密和解密通过CryptoStream类别来处理,它衍生自System.IO.Stream,将字符串作为以资料流为基础的模型,供加密转换之用。下面是一个简单的加密应用类的代码:
ImportsSystem.Diagnostics
ImportsSystem.Security.Cryptography
ImportsSystem.Text
ImportsSystem.IO
PublicClassCryptoUtil
随机选8个字节既为密钥也为初始向量
PrivateSharedKEY_64()AsByte={42,16,93,156,78,4,218,32}
PrivateSharedIV_64()AsByte={55,103,246,79,36,99,167,3}
对TripleDES,采取24字节或192位的密钥和初始向量
PrivateSharedKEY_192()AsByte={42,16,93,156,78,4,218,32,_
15,167,44,80,26,250,155,112,_
2,94,11,204,119,35,184,197}
PrivateSharedIV_192()AsByte={55,103,246,79,36,99,167,3,_
42,5,62,83,184,7,209,13,_
145,23,200,58,173,10,121,222}
标准的DES加密
PublicSharedFunctionEncrypt(ByValvalueAsString)AsString
Ifvalue<>""Then
DimcryptoProviderAsDESCryptoServiceProvider=_
NewDESCryptoServiceProvider()
DimmsAsMemoryStream=NewMemoryStream()
DimcsAsCryptoStream=_
NewCryptoStream(ms,cryptoProvider.CreateEncryptor(KEY_64,IV_64),_
CryptoStreamMode.Write)
DimswAsStreamWriter=NewStreamWriter(cs)
sw.Write(value)
sw.Flush()
cs.FlushFinalBlock()
ms.Flush()
再转换为一个字符串
ReturnConvert.ToBase64String(ms.GetBuffer(),0,ms.Length)
EndIf
EndFunction
标准的DES解密
PublicSharedFunctionDecrypt(ByValvalueAsString)AsString
Ifvalue<>""Then
DimcryptoProviderAsDESCryptoServiceProvider=_
NewDESCryptoServiceProvider()
从字符串转换为字节组
DimbufferAsByte()=Convert.FromBase64String(value)
DimmsAsMemoryStream=NewMemoryStream(buffer)
DimcsAsCryptoStream=_
NewCryptoStream(ms,cryptoProvider.CreateDecryptor(KEY_64,IV_64),_
CryptoStreamMode.Read)
DimsrAsStreamReader=NewStreamReader(cs)
Returnsr.ReadToEnd()
EndIf
EndFunction
TRIPLEDES加密
PublicSharedFunctionEncryptTripleDES(ByValvalueAsString)AsString
Ifvalue<>""Then
DimcryptoProviderAsTripleDESCryptoServiceProvider=_
NewTripleDESCryptoServiceProvider()
DimmsAsMemoryStream=NewMemoryStream()
DimcsAsCryptoStream=_
NewCryptoStream(ms,cryptoProvider.CreateEncryptor(KEY_192,IV_192),_
CryptoStreamMode.Write)
DimswAsStreamWriter=NewStreamWriter(cs)
sw.Write(value)
sw.Flush()
cs.FlushFinalBlock()
ms.Flush()
再转换为一个字符串
ReturnConvert.ToBase64String(ms.GetBuffer(),0,ms.Length)
EndIf
EndFunction
TRIPLEDES解密
PublicSharedFunctionDecryptTripleDES(ByValvalueAsString)AsString
Ifvalue<>""Then
DimcryptoProviderAsTripleDESCryptoServiceProvider=_
NewTripleDESCryptoServiceProvider()
从字符串转换为字节组
DimbufferAsByte()=Convert.FromBase64String(value)
DimmsAsMemoryStream=NewMemoryStream(buffer)
DimcsAsCryptoStream=_
NewCryptoStream(ms,cryptoProvider.CreateDecryptor(KEY_192,IV_192),_
CryptoStreamMode.Read)
DimsrAsStreamReader=NewStreamReader(cs)
Returnsr.ReadToEnd()
EndIf
EndFunction
EndClass
上面我们将一组字节初始化为密钥,并且使用的是数字常量,如果你在实际应用中也这样做,这些字节一定要在0和255之间,这是一个字节允许的范围值。
三、创建一个Cookie的应用类
下面我们就创建一个简单的类,来设置和获取Cookies。
PublicClassCookieUtil
设置COOKIE*****************************************************
SetTripleDESEncryptedCookie(只针对密钥和Cookie数据)
PublicSharedSubSetTripleDESEncryptedCookie(ByValkeyAsString,_
ByValvalueAsString)
key=CryptoUtil.EncryptTripleDES(key)
value=CryptoUtil.EncryptTripleDES(value)
SetCookie(key,value)
EndSub
SetTripleDESEncryptedCookie(增加了Cookie数据的有效期参数)
PublicSharedSubSetTripleDESEncryptedCookie(ByValkeyAsString,_
ByValvalueAsString,ByValexpiresA
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:网络转载面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢