概述VB.NET加密經(jīng)驗(yàn)總結(jié)
VB.NET有很多值得學(xué)習(xí)的地方,這里我們主要介紹VB.NET加密,包括介紹公鑰加密和數(shù)字簽名等方面。
常見的VB.NET加密和編碼算法都已經(jīng)在 .NET Framework中得到了實(shí)現(xiàn),為編碼人員提供了極大的便利性,實(shí)現(xiàn)這些算法的名稱空間是:System.Security.Cryptography.System.Security.Cryptography命名空間提供VB.NET加密服務(wù),包括安全的數(shù)據(jù)編碼和解碼,以及許多其他操作,例如散列法、隨機(jī)數(shù)字生成和消息身份驗(yàn)證。System.Security.Cryptography是按如下方式組織的:
1、私鑰加密
私鑰加密又稱為對稱加密,因?yàn)橥幻荑€既用于加密又用于解密。私鑰加密算法非??欤ㄅc公鑰算法相比),特別適用于對較大的數(shù)據(jù)流執(zhí)行加密轉(zhuǎn)換。
.NET Framework 提供以下實(shí)現(xiàn)私鑰加密算法的類:
◆DES:DESCryptoServiceProvider
◆RC2:RC2CryptoServiceProvider
◆Rijndael(AES):RijndaelManaged
◆3DES:TripleDESCryptoServiceProvider
2、公鑰加密和數(shù)字簽名
公鑰加密使用一個必須對未經(jīng)授權(quán)的用戶保密的私鑰和一個可以對任何人公開的公鑰。用公鑰加密的數(shù)據(jù)只能用私鑰解密,而用私鑰簽名的數(shù)據(jù)只能用公鑰驗(yàn)證。公鑰可以被任何人使用;該密鑰用于加密要發(fā)送到私鑰持有者的數(shù)據(jù)。兩個密鑰對于通信會話都是***的。公鑰加密算法也稱為不對稱算法,原因是需要用一個密鑰加密數(shù)據(jù)而需要用另一個密鑰來解密數(shù)據(jù)。
.NET Framework 提供以下實(shí)現(xiàn)公鑰加密算法的類:
◆DSA:DSACryptoServiceProvider
◆RSA:RSACryptoServiceProvider
3、哈希(Hash)值
哈希算法將任意長度的二進(jìn)制值映射為固定長度的較小二進(jìn)制值,這個小的二進(jìn)制值稱為哈希值。哈希值是一段數(shù)據(jù)***且極其緊湊的數(shù)值表示形式。如果散列一段明文而且哪怕只更改該段落的一個字母,隨后的哈希都將產(chǎn)生不同的值。要找到散列為同一個值的兩個不同的輸入,在計(jì)算上是不可能的,所以數(shù)據(jù)的哈希值可以檢驗(yàn)數(shù)據(jù)的完整性。
.NET Framework 提供以下實(shí)現(xiàn)數(shù)字簽名算法的類:
◆HMAC:HMACSHA1 (HMAC 為一種使用密鑰的 Hash 算法)◆MAC:MACTripleDES
◆MD5:MD5CryptoServiceProvider
◆SHA1:SHA1Managed、SHA256Managed、SHA384Managed、SHA512Managed
4、隨機(jī)數(shù)生成
VB.NET加密密鑰需要盡可能地隨機(jī),以便使生成的密鑰很難再現(xiàn),所以隨機(jī)數(shù)生成是許多加密操作不可分割的組成部分。
在 .NET Framework 中,RNGCryptoServiceProvider 是隨機(jī)數(shù)生成器算法的實(shí)現(xiàn),對于數(shù)據(jù)算法,.NET Framework 則在其它命名空間中實(shí)現(xiàn),如 Convert 類實(shí)現(xiàn) Base 64 編碼,System.Text 來實(shí)現(xiàn)編碼方式的轉(zhuǎn)換等。
簡單的例程:首先需要引用命名空間System.Security.Cryptography
MD5加密:
- Dim md5 As MD5CryptoServiceProvider
- Dim bytValue() As Byte '要進(jìn)行加密的字節(jié)數(shù)組
- Dim bytHash() As Byte '加密后生成的字節(jié)數(shù)組
- Dim result As String
- md5 = New MD5CryptoServiceProvider
- ' 將原始字符串轉(zhuǎn)換成字節(jié)數(shù)組
- bytValue = System.Text.Encoding.UTF8.GetBytes(cpuid)
- ' 計(jì)算散列,并返回一個字節(jié)數(shù)組
- bytHash = md5.ComputeHash(bytValue)
- md5.Clear()
- ' 字節(jié)數(shù)組轉(zhuǎn)換成字符串
- result=Convert.ToBase64String(bytHash)
其他的也是類似的!可以自己去嘗試下的!
從以上來看,.NET Framework 對于數(shù)據(jù)加密/編碼還是支持比較好,大大地方便了開發(fā)人員,但美中不足的是,.NET Framework 中的數(shù)據(jù)加密算法仍然不夠完全,如 IDEA、BLOWFISH、其它算法,如ElGamal、Deffie-Hellman、ECC 等,對于一些其它的數(shù)據(jù)校驗(yàn)算法支持也不夠,如 CRC、SFV 等,開發(fā)人員只能去從早期代碼做移植或者尋找第三方廠商的實(shí)現(xiàn)。
【編輯推薦】