国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

用ASP.NET加密Cookie數據
2005-12-07   

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,將字符串作為以資料流為基礎的模型,供加密轉換之用。下面是一個簡單的加密應用類的代碼:
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, _
ByVal value As String, ByVal expires As Date)
key = CryptoUtil.EncryptTripleDES(key)
value = CryptoUtil.EncryptTripleDES(value)
SetCookie(key, value, expires)
End Sub
'SetEncryptedCookie(只針對密鑰和Cookie數據)
Public Shared Sub SetEncryptedCookie(ByVal key As String, _
ByVal value As String)
key = CryptoUtil.Encrypt(key)
value = CryptoUtil.Encrypt(value)
SetCookie(key, value)
End Sub
'SetEncryptedCookie (增加了Cookie數據的有效期參數)
Public Shared Sub SetEncryptedCookie(ByVal key As String, _
ByVal value As String, ByVal expires As Date)
key = CryptoUtil.Encrypt(key)
value = CryptoUtil.Encrypt(value)
SetCookie(key, value, expires)
End Sub
'SetCookie (只針對密鑰和Cookie數據)
Public Shared Sub SetCookie(ByVal key As String, ByVal value As String)
'編碼部分
key = HttpContext.Current.Server.UrlEncode(key)
value = HttpContext.Current.Server.UrlEncode(value)
Dim cookie As HttpCookie
cookie = New HttpCookie(key, value)
SetCookie(cookie)
End Sub
'SetCookie(增加了Cookie數據的有效期參數)
Public Shared Sub SetCookie(ByVal key As String, _
ByVal value As String, ByVal expires As Date)
'編碼部分
key = HttpContext.Current.Server.UrlEncode(key)
value = HttpContext.Current.Server.UrlEncode(value)
Dim cookie As HttpCookie
cookie = New HttpCookie(key, value)
cookie.Expires = expires
SetCookie(cookie)
End Sub
'SetCookie (只針對HttpCookie)
Public Shared Sub SetCookie(ByVal cookie As HttpCookie)
HttpContext.Current.Response.Cookies.Set(cookie)
End Sub
'獲取COOKIE *****************************************************
Public Shared Function GetTripleDESEncryptedCookieValue(ByVal key As String) _
As String
'只對密鑰加密
key = CryptoUtil.EncryptTripleDES(key)
'獲取Cookie值
Dim value As String
value = GetCookieValue(key)
'解密Cookie值
value = CryptoUtil.DecryptTripleDES(value)
Return value
End Function
Public Shared Function GetEncryptedCookieValue(ByVal key As String) As String
'只對密鑰加密
key = CryptoUtil.Encrypt(key)
'獲取Cookie值
Dim value As String
value = GetCookieValue(key)
'解密Cookie值
value = CryptoUtil.Decrypt(value)
Return value
End Function
Public Shared Function GetCookie(ByVal key As String) As HttpCookie
'編碼密鑰
key = HttpContext.Current.Server.UrlEncode(key)
Return HttpContext.Current.Request.Cookies.Get(key)
End Function
Public Shared Function GetCookieValue(ByVal key As String) As String
Try
'編碼在GetCookie里完成
'獲取Cookie值
Dim value As String
value = GetCookie(key).Value
'解碼所存儲的值
value = HttpContext.Current.Server.UrlDecode(value)
Return value
Catch
End Try
End Function
End Class
上面的設置功能中,有些功能附加提供了Cookie有效期這個參數。不設置該參數,Cookie將只為瀏覽器會話才保存在內存中。為了設置永久的Cookie,就需要設置有效期參數。
上面我們對密鑰和Cookies值進行了編碼與解碼,其原因是Cookies與URLs有同樣的限制,字符“=”和“;”是保留的,不能使用。這在保存加密后的數據時尤其重要,因為加密算法將添加“=”,按所分配塊的大小來填滿該數據塊。
好了,你會保護Cookies數據了吧?

熱詞搜索:

上一篇:使用ASP.NET加密口令
下一篇:加密技術的方方面面

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
亚洲经典在线| 欧美激情一区二区在线| 欧美一区成人| 国产精品美女黄网| 亚洲午夜视频在线观看| 国产精品草莓在线免费观看| 一区二区三区久久| 国产精品乱人伦中文| 亚洲欧美日韩一区二区| 国产欧美日韩高清| 久久久久久久97| 91久久久在线| 国产精品久久久久久久久果冻传媒| av成人免费在线| 欧美影视一区| 在线观看欧美视频| 欧美日韩日日骚| 欧美在线视频不卡| 亚洲国产精品成人综合| 国产精品极品美女粉嫩高清在线| 午夜激情一区| 亚洲激情视频| 国产精品一区二区久久久久| 看片网站欧美日韩| 亚洲影院在线| 亚洲国产精品专区久久| 国产精品第一页第二页第三页| 欧美一级在线播放| 亚洲美女一区| 国产真实久久| 欧美图区在线视频| 久久尤物电影视频在线观看| 中文亚洲字幕| 欧美日韩国语| 久久夜色精品亚洲噜噜国产mv| 99成人精品| 激情成人综合| 国产精品区一区二区三区| 猫咪成人在线观看| 午夜精品电影| 一区二区激情视频| 亚洲国产日韩在线| 欧美精品久久久久久久久老牛影院| 羞羞色国产精品| 99精品99| 亚洲欧洲日韩综合二区| 国产一区二区三区不卡在线观看| 欧美日韩亚洲一区二区三区四区| 噜噜噜91成人网| 久久久精品国产一区二区三区| 亚洲午夜成aⅴ人片| 亚洲日本欧美日韩高观看| 禁断一区二区三区在线| 国产欧美日韩视频在线观看| 欧美日韩在线一二三| 免费美女久久99| 久久这里有精品15一区二区三区| 欧美亚洲日本一区| 午夜精品一区二区三区在线视 | 欧美国产另类| 久久乐国产精品| 午夜精品久久久久久久久久久久| 一本久久综合亚洲鲁鲁| 亚洲免费播放| 亚洲欧洲精品一区二区三区不卡| 国产综合久久久久久| 国产专区综合网| 黄色日韩网站视频| 精品999在线播放| 在线观看91久久久久久| 精品91在线| 亚洲电影有码| 亚洲精品精选| 在线亚洲免费| 亚洲欧美在线网| 久久精品伊人| 欧美成人综合一区| 久久99伊人| 欧美福利视频一区| 欧美午夜久久| 国产日韩精品入口| 国内成+人亚洲+欧美+综合在线| 精品动漫3d一区二区三区| 亚洲第一久久影院| 妖精成人www高清在线观看| 亚洲一区免费| 久久久青草婷婷精品综合日韩| 嫩草国产精品入口| 欧美日韩中国免费专区在线看| 国产美女精品视频| 亚洲第一成人在线| 亚洲欧美国产一区二区三区| 久久久久久亚洲精品杨幂换脸| 欧美成人精品激情在线观看| 国产精品久久久免费| 激情五月综合色婷婷一区二区| 亚洲精品综合| 久久国产精品99国产| 欧美国产激情| 国产色视频一区| 亚洲精品久久久久中文字幕欢迎你| 国产精品乱人伦一区二区| 精品成人a区在线观看| 一区二区三区免费在线观看| 欧美综合二区| 欧美视频一区二区三区| 今天的高清视频免费播放成人 | 欧美日本精品在线| 国产欧美视频一区二区| 最新亚洲电影| 欧美在线视频观看| 免费成人黄色片| 国产日韩欧美一区二区三区在线观看| 亚洲国产精品激情在线观看| 欧美一激情一区二区三区| 欧美精品粉嫩高潮一区二区 | 亚洲国产日韩欧美在线99| 夜夜夜久久久| 老司机精品视频一区二区三区| 欧美日韩国产在线观看| 国产欧美91| 一区二区三区视频在线观看| 免费试看一区| 精品不卡视频| 久久国产精品一区二区三区| 国产精品成人一区二区网站软件 | 欧美综合国产| 国产精品视频网址| 亚洲激情一区二区| 欧美一区二区视频在线观看2020| 欧美视频一区二区在线观看 | 欧美日韩在线播放三区四区| 在线不卡欧美| 久久久久久尹人网香蕉| 国产美女精品在线| 亚洲性夜色噜噜噜7777| 欧美日韩在线不卡一区| 亚洲人成小说网站色在线| 麻豆成人在线| 一区二区亚洲欧洲国产日韩| 亚洲国产激情| 模特精品在线| 亚洲成人资源| 久久免费视频网站| 激情亚洲一区二区三区四区| 亚洲欧洲av一区二区三区久久| 欧美日韩一区二区三区四区在线观看| 韩国女主播一区| 久久中文字幕导航| 亚洲国产精品一区二区三区| 欧美成人午夜免费视在线看片 | 欧美国产第二页| 在线观看国产精品淫| 美女脱光内衣内裤视频久久网站| 亚洲欧洲日产国产网站| 欧美成人情趣视频| 亚洲无玛一区| 国产乱肥老妇国产一区二| 久久精品国产999大香线蕉| 国产亚洲精品高潮| 欧美成人精品高清在线播放| 亚洲国产精品一区二区三区| 欧美人与禽猛交乱配| 亚洲欧美一级二级三级| 国产在线乱码一区二区三区| 女女同性精品视频| 亚洲无毛电影| 国产精品久久久久9999高清| 欧美一区二区高清在线观看| 亚洲福利视频网| 欧美日韩裸体免费视频| 欧美一区二区免费| 在线看成人片| 亚洲欧美在线一区| 国产美女精品在线| 久久躁日日躁aaaaxxxx| 99riav1国产精品视频| 国产美女精品视频| 麻豆视频一区二区| 在线成人激情视频| 国产精品久久久久久福利一牛影视| 在线一区欧美| 亚洲高清久久网| 欧美乱妇高清无乱码| 亚洲深夜福利在线| 欧美亚洲第一区| 久久久久久九九九九| 亚洲欧洲日产国产网站| 欧美日韩一区免费| 亚洲高清视频在线观看| 欧美国产极速在线| 9色精品在线| 国产欧美日韩在线视频| 欧美日韩精品伦理作品在线免费观看| 亚洲一区二区在线看| 极品日韩久久| 欧美日韩国产在线看| 欧美成人有码| 欧美一区亚洲| 日韩一区二区高清|