国产一级一区二区_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久久久久久| 欧美丰满一区二区免费视频| 国产精品入口麻豆九色| 国产成人一区在线| 久久综合久久久久88| 国产精品一级在线| 国产精品国产自产拍在线| 99久久精品99国产精品| 亚洲美女精品一区| 欧美日韩午夜精品| 黄色精品一二区| 亚洲天堂av老司机| 欧美一区日韩一区| 懂色av一区二区三区蜜臀| 亚洲天堂中文字幕| 欧美一级电影网站| 粉嫩欧美一区二区三区高清影视| 一区二区三区中文字幕精品精品| 日韩欧美你懂的| 91视频免费播放| 黑人巨大精品欧美黑白配亚洲| 日本一区二区三区在线观看| 欧美视频在线观看一区| 国产一区二区不卡在线| 亚洲最大成人综合| 日本一区二区三区电影| 欧美久久一区二区| 91麻豆免费观看| 国产一二精品视频| 天天影视色香欲综合网老头| 国产精品女同一区二区三区| 精品少妇一区二区三区免费观看| 欧美在线观看视频一区二区三区| 国产成人在线免费| 久久国产精品一区二区| 亚洲午夜精品在线| 亚洲人成网站色在线观看| 26uuu国产日韩综合| 在线综合亚洲欧美在线视频| 在线日韩av片| 色悠悠久久综合| 91原创在线视频| 99精品桃花视频在线观看| 国产精品一二三| 国产乱码精品一区二区三区五月婷| 五月婷婷综合在线| 亚洲午夜电影网| 亚洲日本在线a| 国产精品麻豆99久久久久久| 久久午夜国产精品| 精品国精品自拍自在线| 日韩色视频在线观看| 精品视频一区二区三区免费| 99精品久久久久久| 国产精品一级在线| 韩国一区二区视频| 亚洲品质自拍视频| 国产精品毛片久久久久久久| 久久综合九色综合欧美98 | 国产高清精品在线| 日韩国产高清在线| 中文字幕中文字幕中文字幕亚洲无线| 精品久久久久99| 91精品国产免费久久综合| 日本韩国欧美一区| 成人av在线一区二区| caoporn国产精品| 成人免费视频播放| 丁香婷婷综合五月| 国产成人鲁色资源国产91色综 | 日韩欧美另类在线| 欧美久久久久免费| 欧美色男人天堂| 欧美日韩国产区一| 欧美日韩精品欧美日韩精品一 | 91蜜桃网址入口| 92精品国产成人观看免费| 久久不见久久见免费视频1| 一区二区三区四区激情| 樱花草国产18久久久久| 亚洲免费在线视频| 中文字幕亚洲电影| 亚洲男人都懂的| 亚洲国产成人av网| 九九视频精品免费| 国产.欧美.日韩| 色综合天天天天做夜夜夜夜做| 99视频在线观看一区三区| 成人国产精品免费观看动漫| av爱爱亚洲一区| 欧美日韩高清影院| 精品三级av在线| 国产精品免费视频观看| 亚洲一区免费视频| 欧美电视剧免费全集观看| 国产精品久久久久久久久晋中 | 国产一区二区久久| 成人网在线免费视频| 不卡影院免费观看| 国产在线精品免费av| 国产日韩欧美麻豆| 精品999久久久| 中文字幕亚洲不卡| 日韩精品三区四区| 国产乱一区二区| 欧美三区在线观看| 国产精品国产自产拍在线| 亚洲尤物在线视频观看| 日本中文字幕不卡| 成人美女视频在线看| 欧美日韩国产经典色站一区二区三区| 欧美成人bangbros| 亚洲精品免费一二三区| 日韩影院免费视频| 91麻豆成人久久精品二区三区| 日韩视频一区二区三区| 成人欧美一区二区三区视频网页 | 国产精品亲子伦对白| 亚洲黄色在线视频| 久久电影网电视剧免费观看| 色综合天天综合色综合av| 欧美成人精品3d动漫h| 宅男在线国产精品| 亚洲欧美日韩综合aⅴ视频| 美腿丝袜亚洲一区| 在线观看91视频| 亚洲黄色尤物视频| 欧洲国产伦久久久久久久| 国产精品盗摄一区二区三区| 国产一区二区三区美女| 91蜜桃婷婷狠狠久久综合9色| 中文成人综合网| 国产乱码精品一品二品| 在线综合视频播放| 亚洲国产日韩一区二区| 95精品视频在线| 国产精品区一区二区三| 99久久国产综合精品色伊 | 日韩免费电影网站| 亚洲国产精品久久艾草纯爱| 91麻豆精品秘密| 国产精品久久看| 成人自拍视频在线观看| 日韩亚洲欧美综合| 五月天精品一区二区三区| 日本精品视频一区二区三区| 亚洲欧美中日韩| 99视频在线精品| 国产精品福利一区| 91小视频在线观看| 欧美国产激情二区三区| 成人午夜视频在线观看| 国产人成一区二区三区影院| 国产福利一区二区三区视频在线 | 亚洲柠檬福利资源导航| caoporn国产精品| 亚洲精品免费在线观看| 色婷婷亚洲综合| 亚洲影视在线播放| 欧美色图天堂网| 久久久蜜桃精品| 在线视频欧美区| 视频一区二区不卡| 日韩美女在线视频| 国产一区二区在线视频| 国产日韩精品久久久| 成人永久看片免费视频天堂| 国产精品久久久99| 懂色av一区二区三区免费看| 亚洲第一激情av| 精品久久一区二区三区| 丁香五精品蜜臀久久久久99网站| 亚洲欧洲一区二区在线播放| 在线观看www91| 免费久久精品视频| 亚洲人成网站色在线观看| 欧美日韩日日摸| 国产精品一区二区久久精品爱涩 | 欧美一区二区视频在线观看| 寂寞少妇一区二区三区| 中文字幕一区三区| 欧美日韩国产高清一区| 国产精品白丝jk黑袜喷水| 亚洲精品日日夜夜| 日韩欧美一二三区| 99久久久免费精品国产一区二区 | 一区二区三区精品在线| 91精品国产全国免费观看| 国产激情视频一区二区在线观看 | 欧美精品视频www在线观看| 日本美女一区二区三区视频| 久久久久九九视频| 欧美影视一区在线| 国产乱色国产精品免费视频| 亚洲香蕉伊在人在线观| 久久精品一区二区三区不卡| 欧美日韩在线免费视频| 激情国产一区二区| 美女视频黄 久久|