国产一级一区二区_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久久夜色精品国产_欧美色网一区二区
亚洲理伦在线| 国产欧美在线观看一区| 久久亚洲风情| 在线视频成人| 亚洲视频在线视频| 国产精品99一区| 亚洲国产高清aⅴ视频| 欧美激情综合网| 午夜伦理片一区| 亚洲精品美女| 在线观看一区欧美| 国产精品一级二级三级| 麻豆成人91精品二区三区| 午夜精品在线视频| 夜夜狂射影院欧美极品| 在线观看国产欧美| 国内久久婷婷综合| 亚洲午夜精品久久| 久久久久久香蕉网| 亚洲精品一区在线| 小嫩嫩精品导航| 欧美日韩国产小视频| 久热精品在线视频| 欧美大胆成人| 欧美日韩亚洲一区二区三区在线观看 | 国产精品视频一区二区三区| 欧美在线综合视频| 亚洲制服丝袜在线| 午夜在线播放视频欧美| 欧美一区二区福利在线| 久久久久免费视频| 亚洲最新视频在线播放| 日韩视频一区二区在线观看| 日韩午夜精品视频| 香蕉av福利精品导航| 欧美一区二区视频在线观看| 亚洲一区影音先锋| 久久视频一区| 欧美激情aaaa| 欧美精品日日鲁夜夜添| 欧美日韩一区二区在线播放| 欧美国产大片| 国产伦精品一区二区三区照片91| 国产在线日韩| 一区二区三区www| 久久夜精品va视频免费观看| 欧美天堂亚洲电影院在线观看| 韩国av一区二区三区在线观看| 国内精品模特av私拍在线观看| 亚洲日本无吗高清不卡| 99视频精品| 美女视频黄免费的久久| 欧美午夜精品久久久久久超碰| 国产欧美综合一区二区三区| 一区二区三区国产精华| 女主播福利一区| 韩国三级电影久久久久久| 亚洲香蕉视频| 欧美体内she精视频在线观看| 亚洲福利视频免费观看| 欧美亚洲一区二区在线观看| 国产精品激情电影| 亚洲在线网站| 国产欧美精品在线播放| 欧美亚洲网站| 在线观看精品视频| 免费在线观看精品| 亚洲狼人精品一区二区三区| 女仆av观看一区| 亚洲精品视频在线观看网站 | 国产午夜精品美女毛片视频| 亚洲乱码视频| 国产精品xxxxx| 久久精品91| 亚洲精品你懂的| 国产精品久久久久久久午夜片| 亚洲免费网站| 一区二区三区在线观看视频| 开心色5月久久精品| 一区二区久久| 国产日韩在线亚洲字幕中文| 久久人人超碰| 亚洲婷婷免费| 亚洲电影免费在线观看| 欧美无砖砖区免费| 欧美 日韩 国产一区二区在线视频| 一本色道久久综合狠狠躁篇怎么玩 | 亚洲少妇最新在线视频| 韩国av一区二区三区| 美女国内精品自产拍在线播放| 99精品99| 亚洲精品乱码久久久久久黑人| 国产精品v欧美精品v日本精品动漫| 久久久噜久噜久久综合| 在线一区二区三区做爰视频网站| 国内揄拍国内精品久久| 国产精品嫩草影院av蜜臀| 欧美日韩网站| 欧美午夜免费影院| 欧美性理论片在线观看片免费| 欧美激情视频在线播放| 农夫在线精品视频免费观看| 久久久xxx| 美女脱光内衣内裤视频久久影院| 欧美一区二区三区喷汁尤物| 亚洲一区二区高清| 亚洲图片自拍偷拍| 欧美在线日韩在线| 乱码第一页成人| 欧美三区在线视频| 国产嫩草一区二区三区在线观看| 国产日韩欧美精品| 亚洲高清av| 亚洲图片欧洲图片av| 亚洲午夜在线观看| 久久婷婷国产综合精品青草| 欧美大片第1页| 国产精品高清在线| 亚洲国产经典视频| 亚洲在线视频观看| 欧美精品一区二区三区蜜桃 | 99国产精品| 亚洲欧美韩国| 欧美日韩国产免费| 在线电影欧美日韩一区二区私密| 亚洲精品一二| 久久精品主播| 国产精品视频网站| 亚洲人www| 久久高清一区| 国产日本亚洲高清| 亚洲免费视频观看| 欧美成人免费播放| 亚洲高清不卡av| 久久噜噜亚洲综合| 国产日韩专区| 久久精品国产综合精品| 国产伦一区二区三区色一情| 亚洲九九精品| 亚洲午夜激情网站| 欧美视频一区二区三区…| 在线观看一区| 久久精品国产免费观看| 国产精品一区毛片| 午夜精品久久久久久久久久久| 欧美性大战久久久久久久| 99热这里只有成人精品国产| 欧美精品久久99| 一区二区三区四区五区精品视频| 久久免费视频观看| 亚洲福利一区| 欧美性大战久久久久| 亚洲欧美日韩天堂| 精品成人免费| 欧美日韩国产电影| 欧美在线视频一区二区三区| 亚洲高清视频在线观看| 欧美日韩一区高清| 欧美一区日韩一区| 亚洲国产精品免费| 国产精品日韩高清| 欧美精品性视频| 久久久久久久97| 亚洲一区影院| 亚洲国产aⅴ天堂久久| 国产精品久久久999| 欧美华人在线视频| 久久青青草综合| 亚洲尤物精选| 亚洲一区二区三区欧美| 亚洲国产婷婷香蕉久久久久久99 | 亚洲女ⅴideoshd黑人| 韩国久久久久| 国产日韩欧美一区二区三区四区| 久久综合伊人77777麻豆| 午夜精品久久久久久99热软件| 日韩视频精品| 91久久精品国产91久久性色| 亚洲高清不卡| 亚洲国产日韩一级| 精品成人一区二区| 亚洲国产精品va在线观看黑人| 黄色成人免费观看| 最新日韩中文字幕| 99精品久久免费看蜜臀剧情介绍| 亚洲日本va午夜在线电影| 99国产精品99久久久久久| 一区二区高清视频在线观看| 亚洲午夜成aⅴ人片| 亚洲制服av| 久久米奇亚洲| 欧美日韩亚洲高清一区二区| 国产精品看片资源| 国产精品jvid在线观看蜜臀| 国产精品视频免费观看| 国产一区高清视频| 日韩一级黄色片| 午夜精品在线看| 欧美激情欧美激情在线五月| 国产精品电影网站|