国产一级一区二区_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久久夜色精品国产_欧美色网一区二区
成人免费在线播放视频| 欧美亚洲高清一区| 激情文学综合网| 91蝌蚪porny九色| 久久综合一区二区| 免费高清成人在线| 欧美日本国产一区| 国产精品美女久久久久久2018| 蜜桃久久精品一区二区| 欧美日韩二区三区| 亚洲一区二区三区四区在线观看| www.亚洲精品| 久久久噜噜噜久久中文字幕色伊伊| 午夜精品福利一区二区蜜股av| 欧美卡1卡2卡| 秋霞av亚洲一区二区三| 日韩一区二区高清| 韩国av一区二区三区| 国产日韩欧美精品一区| 成人激情文学综合网| 亚洲视频在线观看三级| 韩国av一区二区三区在线观看| 久久这里都是精品| 成人丝袜视频网| 亚洲一区中文在线| 91精品国产全国免费观看 | 婷婷夜色潮精品综合在线| 337p亚洲精品色噜噜噜| 美国欧美日韩国产在线播放| 久久久精品影视| 91网址在线看| 日韩经典一区二区| 精品国产乱码久久久久久久久| 国产精品69久久久久水密桃| 国产精品三级在线观看| 欧美色手机在线观看| 免费的成人av| 国产精品二区一区二区aⅴ污介绍| 在线日韩一区二区| 国产尤物一区二区在线 | 色综合久久久网| 日本在线观看不卡视频| 中文字幕第一区综合| 欧美视频一区在线观看| 国产精品一卡二卡| 午夜久久久久久| 欧美高清在线精品一区| 精品视频免费看| 成人美女视频在线观看18| 视频在线观看91| 国产精品视频在线看| 欧美一级日韩免费不卡| 成人av电影在线观看| 午夜成人在线视频| 国产人久久人人人人爽| 7777精品伊人久久久大香线蕉完整版| 国产中文一区二区三区| 亚洲电影第三页| 中文幕一区二区三区久久蜜桃| 在线不卡一区二区| 国产成人午夜电影网| 一卡二卡三卡日韩欧美| 中文字幕欧美激情| 欧美一区三区四区| 91美女蜜桃在线| 成人视屏免费看| 蜜臀av在线播放一区二区三区| 亚洲欧美综合另类在线卡通| 精品卡一卡二卡三卡四在线| 91免费观看国产| 波多野结衣的一区二区三区| 国产乱码精品一区二区三区忘忧草 | 欧美成人一区二区三区在线观看 | 亚洲欧美日韩国产另类专区| 精品少妇一区二区三区| 欧美军同video69gay| 国产jizzjizz一区二区| 首页亚洲欧美制服丝腿| 亚洲天堂a在线| 国产精品国产三级国产aⅴ中文| 精品国产免费视频| 欧美伊人久久久久久午夜久久久久| 9i在线看片成人免费| 国产白丝网站精品污在线入口| 激情综合色综合久久综合| 国产日韩一级二级三级| 欧美成人一区二区三区在线观看 | 亚洲一区免费视频| 日韩一区在线播放| 中文字幕精品一区| 国产亚洲一区二区在线观看| 精品国产一区二区三区久久影院| 精品福利av导航| 国产清纯白嫩初高生在线观看91| 欧美一卡2卡三卡4卡5免费| 91精品国产综合久久香蕉的特点 | 亚洲va中文字幕| 亚洲品质自拍视频| 国产精品日日摸夜夜摸av| 久久久久国色av免费看影院| 日韩限制级电影在线观看| 日韩精品中文字幕一区| 欧美日韩高清在线| 2023国产精华国产精品| 久久久久亚洲蜜桃| 国产精品嫩草影院com| 亚洲欧美日韩一区二区| 中文字幕中文字幕一区| 亚洲欧美日韩系列| 午夜电影网亚洲视频| 视频一区二区中文字幕| 国产一区不卡视频| 国产a视频精品免费观看| 国产成人高清视频| 一本到不卡免费一区二区| 在线看日本不卡| 欧美一区二区三区爱爱| 欧美成人免费网站| 亚洲视频图片小说| 日本欧美一区二区三区乱码| 国产一区二区三区久久久| 色综合天天综合网国产成人综合天| 9i在线看片成人免费| 欧美日韩在线播放三区| 欧美精品一区二区三区蜜桃视频 | 丰满白嫩尤物一区二区| 91在线视频免费观看| 欧美一区二区三区思思人| 亚洲国产精品黑人久久久| 男女男精品视频| 国产精品一区久久久久| 91高清在线观看| 久久精品一二三| 亚洲午夜电影在线| av在线免费不卡| 久久你懂得1024| 亚洲一区视频在线| 成人黄色在线网站| 国产丝袜欧美中文另类| 老司机精品视频在线| 欧美日韩一区二区欧美激情| 亚洲国产精品99久久久久久久久 | 国产亚洲女人久久久久毛片| 亚洲自拍与偷拍| 91首页免费视频| 欧美激情一区二区三区四区| 老司机精品视频线观看86| 欧美日韩大陆一区二区| 亚洲情趣在线观看| 成人污视频在线观看| 精品va天堂亚洲国产| 国产一区不卡精品| 久久这里只有精品首页| 精品一区二区三区免费| 日本高清免费不卡视频| 中文字幕第一区| 成人国产精品免费观看动漫| 欧美国产日韩亚洲一区| 国产乱码精品一区二区三| 久久五月婷婷丁香社区| 精品一区二区三区视频| 精品国产成人在线影院| 精品一区二区三区在线播放| 久久精品人人做人人综合 | 日韩专区中文字幕一区二区| 欧美三级三级三级爽爽爽| 一区二区三区日韩| 色拍拍在线精品视频8848| 亚洲品质自拍视频网站| 在线区一区二视频| 天涯成人国产亚洲精品一区av| 7777精品伊人久久久大香线蕉经典版下载 | 国内久久婷婷综合| 国产三级精品在线| 99精品视频在线免费观看| 色婷婷综合在线| 成人三级伦理片| 亚洲最新视频在线播放| 欧美精品日日鲁夜夜添| 麻豆国产精品777777在线| 久久中文娱乐网| 99久久99久久综合| 午夜欧美电影在线观看| 精品奇米国产一区二区三区| 高清成人免费视频| 一区二区三区日韩精品| 91精品国产综合久久婷婷香蕉 | 久久免费午夜影院| 97久久超碰精品国产| 天天操天天干天天综合网| 久久亚洲一区二区三区四区| 色综合一区二区| 精品一区二区三区免费毛片爱| 国产精品水嫩水嫩| 欧美喷水一区二区| 成人丝袜18视频在线观看| 亚洲h精品动漫在线观看| 国产欧美日韩另类一区| 欧美久久一区二区| 99久久综合国产精品|