如何用ASP.NET加密Cookie数据过程呢,这里做个简单的分析。

首先,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,将字符串作为以资料流为基础的模型,供加密转换之用。下面是一个简单的加密应用类的代码:
  
  Imports System.Diagnostics
  
  Imports System.Security.Cryptography
  
  Imports System.Text
  
  Imports System.IO
  
  
  Public Class CryptoUtil
  
  
  '随机选8个字节既为密钥也为初始向量
  
  Private Shared KEY_64() As Byte = {42, 16, 93, 156, 78, 4, 218, 32}
  
  Private Shared IV_64() As Byte = {55, 103, 246, 79, 36, 99, 167, 3}
  
  
  '对TripleDES,采取24字节或192位的密钥和初始向量
  
  Private Shared KEY_192() As Byte = {42, 16, 93, 156, 78, 4, 218, 32, _
  
  15, 167, 44, 80, 26, 250, 155, 112, _
  
  2, 94, 11, 204, 119, 35, 184, 197}
  
  Private Shared IV_192() As Byte = {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加密
  
  Public Shared Function Encrypt(ByVal value As String) As String
  
  If value <> "" Then
  
  Dim cryptoProvider As DESCryptoServiceProvider = _
  
  New DESCryptoServiceProvider()
  
  Dim ms As MemoryStream = New MemoryStream()
  
  Dim cs As CryptoStream = _
  
  New CryptoStream(ms, cryptoProvider.CreateEncryptor(KEY_64, IV_64), _
  
  CryptoStreamMode.Write)
  
  Dim sw As StreamWriter = New StreamWriter(cs)
  
  
  sw.Write(value)
  
  sw.Flush()
  
  cs.FlushFinalBlock()
  
  ms.Flush()
  
  
  '再转换为一个字符串
  
  Return Convert.ToBase64String(ms.GetBuffer(), 0, ms.Length)
  
  End If
  
  End Function
  
  
  
  '标准的DES解密
  
  Public Shared Function Decrypt(ByVal value As String) As String
  
  If value <> "" Then
  
  Dim cryptoProvider As DESCryptoServiceProvider = _
  
  New DESCryptoServiceProvider()
  
  
  '从字符串转换为字节组
  
  Dim buffer As Byte() = Convert.FromBase64String(value)
  
  Dim ms As MemoryStream = New MemoryStream(buffer)
  
  Dim cs As CryptoStream = _
  
  New CryptoStream(ms, cryptoProvider.CreateDecryptor(KEY_64, IV_64), _
  
  CryptoStreamMode.Read)
  
  Dim sr As StreamReader = New StreamReader(cs)
  
  
  Return sr.ReadToEnd()
  
  End If
  
  End Function
  
  
  'TRIPLE DES加密
  
  Public Shared Function EncryptTripleDES(ByVal value As String) As String
  
  If value <> "" Then
  
  Dim cryptoProvider As TripleDESCryptoServiceProvider = _
  
  New TripleDESCryptoServiceProvider()
  
  Dim ms As MemoryStream = New MemoryStream()
  
  Dim cs As CryptoStream = _
  
  New CryptoStream(ms, cryptoProvider.CreateEncryptor(KEY_192, IV_192), _
  
  CryptoStreamMode.Write)
  
  Dim sw As StreamWriter = New StreamWriter(cs)
  
  
  sw.Write(value)
  
  sw.Flush()
  
  cs.FlushFinalBlock()
  
  ms.Flush()
  
  
  '再转换为一个字符串
  
  Return Convert.ToBase64String(ms.GetBuffer(), 0, ms.Length)
  
  End If
  
  End Function
  
  
  
  'TRIPLE DES解密
  
  Public Shared Function DecryptTripleDES(ByVal value As String) As String
  
  If value <> "" Then
  
  Dim cryptoProvider As TripleDESCryptoServiceProvider = _
  
  New TripleDESCryptoServiceProvider()
  
  
  '从字符串转换为字节组
  
  Dim buffer As Byte() = Convert.FromBase64String(value)
  
  Dim ms As MemoryStream = New MemoryStream(buffer)
  
  Dim cs As CryptoStream = _
  
  New CryptoStream(ms, cryptoProvider.CreateDecryptor(KEY_192, IV_192), _
  
  CryptoStreamMode.Read)
  
  Dim sr As StreamReader = New StreamReader(cs)
  
  
  Return sr.ReadToEnd()
  
  End If
  
  End Function
  
  
  End Class
  
  上面我们将一组字节初始化为密钥,并且使用的是数字常量,如果你在佛山实际应用中也这样做,这些字节一定要在0和255之间,这是一个字节大田阀门产品中心允许的范围值。
  
  三、创建一个Cookie的应用类
  
  下面我们就创建一个简单的类,来设置和获取Cookies。
  
  Public Class CookieUtil
  
  
  '设置COOKIE *****************************************************
  
  
  'SetTripleDESEncryptedCookie (只针对密钥和Cookie数据)
  
  Public Shared Sub SetTripleDESEncryptedCookie(ByVal key As String, _
  
  ByVal value As String)
  
  key = CryptoUtil.EncryptTripleDES(key)
  
  value = CryptoUtil.EncryptTripleDES(value)
  
  
  SetCookie(key, value)
  
  End Sub
  
  
  'SetTripleDESEncryptedCookie (增加了Cookie数据的有效期参数)
  
  Public Shared Sub SetTripleDESEncryptedCookie(ByVal key As String, _

自吸泵相关信息请访问:

转载于:https://www.cnblogs.com/lanxin258/archive/2012/01/12/2320605.html

如何用ASP.NET加密Cookie数据过程分析相关推荐

  1. set-cookie 和 cookie 的区别_Go Web 编程如何确保Cookie数据的安全传输

    什么是Cookie Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上.通常, ...

  2. Go Web 编程--如何确保Cookie数据的安全传输

    什么是Cookie Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上.通常, ...

  3. 使用ASP加密算法加密你的数据

    使用ASP加密算法加密你的数据(一) 简介 首先简单介绍一下有关加密的背景.由于美国禁止几种密码算法的对外出口的 加密位数(例如SSL的40位加密限制),本文将介绍一种ASP可以使用的简单字符加密算法 ...

  4. Asp.Net使用加密cookie代替session验证用户登录状态 源码分享 欢迎拍砖

    小论坛地址: http://rayyu.5d6d.com/thread-9444-1-1.html 正文: 首先 session 和 cache 拥有各自的优势而存在.  他们的优劣就不在这里讨论了. ...

  5. ASP.NET 中 Cookie 的基本知识

    简介 Cookie 为 Web 应用程序保存用户相关信息提供了一种有用的方法.例如,当用户访问您的站点时,您可以利用 Cookie 保存用户首选项或其他信息,这样,当用户下次再访问您的站点时,应用程序 ...

  6. ASP.NET页面间数据传递的方法

    本文我们将讨论的是ASP.NET页面间数据传递的几种方法,对此希望能帮助大家正确的理解ASP.NET页面间数据传递的用处以及便利性. 0.引言 Web页面是无状态的, 服务器对每一次请求都认为来自不同 ...

  7. ASP.NET 操作Cookie详解 增加,修改,删除

    ASP.NET 操作Cookie详解 增加,修改,删除 Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密).定义于RFC2109.它 ...

  8. ASP.NET页面间数据传递的几种方法

    1.ASP.NET页面间数据传递的各种方法和分析 1.1 使用Querystring 方法 QueryString 也叫查询字符串, 这种方法将要传递的数据附加在网页地址(URL)后面进行传递.如页面 ...

  9. asp.net页面间数据传递(总结篇)

    asp.net页面间数据传递(总结篇) 1. Get(即使用QueryString显式传递)      方式:在url后面跟参数.      特点:简单.方便.      缺点:字符串长度最长为255 ...

最新文章

  1. python手机版下载372-Mac下python环境的安装
  2. 做不背锅的运维(文末有彩蛋!)
  3. echarts迁徙图 vue_vue中高德搭配echarts做数据迁徙流线图
  4. IntelliJ Idea工具使用
  5. 操作系统上机题目(多线程1)
  6. java位运算(转)
  7. 字符串匹配算法总结(转)
  8. JAVA线程1 - 基本概念
  9. C语言会场安排问题贪心算法,贪心算法解决会场安排问题多处最优服务次序问题(含源代码).doc...
  10. Java基础:等待唤醒机制、线程池
  11. Matlab2010b反复激活解决办法
  12. 软件license授权加、解密,软件注册工具(2)
  13. 智云通CRM:大客户销售流程,新手也能快速入门
  14. e路航LH900N导航仪凯立德最新版本地图更新方法
  15. window.print() 表格打印 完美实现分页
  16. 解析春运玄学:携程飞猪去哪儿们的抢票加速包,到底灵不灵?
  17. 整合腾讯云地图的绘制和编辑几何图形
  18. VSCode格式化XML
  19. 路透社:特斯拉5月在华汽车订单较4月减少近一半
  20. IBM实习日记——6.16-6.18

热门文章

  1. 在Mac上安装Hadoop
  2. 用ul和li实现表格table效果 (转)
  3. Windows从web下载文件的几种方式
  4. Python运维开发基础01-语法基础【转】
  5. PostgreSQL-JDBC疑似bug:部分接口参数的表名、列名必须全部小写
  6. sublime必备插件
  7. C#[Serializable]在C#中的作用-NET 中的对象序列化
  8. CodeIgniter源码分析(一) 目录结构
  9. 开发完整J2EE解决方案的八个步骤
  10. python设计模式六大原则_php设计模式的六大原则(六):迪米特法则