VB.NET 的 DES 加密與解密(轉載於nofort部落格)
阿新 • • 發佈:2019-01-30
MD5和SHA的加密方式都是單向的,就算是我寫的程式使用者的密碼用這兩種方式儲存後,我對著看也不知道他們的密碼是什麼,這用在儲存密碼上是不錯的,但如果是一些需要能將密文還原的應用來說就不合適了,所以接下來就是我們的DES演算法上場了。
DES要求兩個關健資料 一個是key(金鑰)一個是初始化向量(IV)只要這兩個資料一致就可以還原出原來的資料,為了方便還是寫成函式
TripleDES演算法基本上DES是一樣的不過加密的強度不同,同SHA1和SHA512區別一樣,更高的強度,意味著運算速度的相應下降。
其實用這種方法加密最重要的是保護好KEY和IV。
解密函式
呼叫
DES要求兩個關健資料 一個是key(金鑰)一個是初始化向量(IV)只要這兩個資料一致就可以還原出原來的資料,為了方便還是寫成函式
TripleDES演算法基本上DES是一樣的不過加密的強度不同,同SHA1和SHA512區別一樣,更高的強度,意味著運算速度的相應下降。
其實用這種方法加密最重要的是保護好KEY和IV。
加密函式
Public Function EncryptDes(ByVal SourceStr As String, ByVal myKey As String, ByVal myIV As String) As String '使用的DES對稱加密 Dim des As New System.Security.Cryptography.DESCryptoServiceProvider 'DES演算法 'Dim DES As New System.Security.Cryptography.TripleDESCryptoServiceProvider'TripleDES演算法 Dim inputByteArray As Byte() inputByteArray = System.Text.Encoding.Default.GetBytes(SourceStr) des.Key = System.Text.Encoding.UTF8.GetBytes(myKey) 'myKey DES用8個字元,TripleDES要24個字元 des.IV = System.Text.Encoding.UTF8.GetBytes(myIV) 'myIV DES用8個字元,TripleDES要24個字元 Dim ms As New System.IO.MemoryStream Dim cs As New System.Security.Cryptography.CryptoStream(ms, des.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write) Dim sw As New System.IO.StreamWriter(cs) sw.Write(SourceStr) sw.Flush() cs.FlushFinalBlock() ms.Flush() EncryptDes = Convert.ToBase64String(ms.GetBuffer(), 0, ms.Length) End Function
解密函式
Public Function DecryptDes(ByVal SourceStr As String, ByVal myKey As String, ByVal myIV As String) As String '使用標準DES對稱解密 Dim des As New System.Security.Cryptography.DESCryptoServiceProvider 'DES演算法 'Dim DES As New System.Security.Cryptography.TripleDESCryptoServiceProvider'TripleDES演算法 des.Key = System.Text.Encoding.UTF8.GetBytes(myKey) 'myKey DES用8個字元,TripleDES要24個字元 des.IV = System.Text.Encoding.UTF8.GetBytes(myIV) 'myIV DES用8個字元,TripleDES要24個字元 Dim buffer As Byte() = Convert.FromBase64String(SourceStr) Dim ms As New System.IO.MemoryStream(buffer) Dim cs As New System.Security.Cryptography.CryptoStream(ms, des.CreateDecryptor(), System.Security.Cryptography.CryptoStreamMode.Read) Dim sr As New System.IO.StreamReader(cs) DecryptDes = sr.ReadToEnd() End Function
呼叫
Dim mytxt, EDes, msgtxt As String mytxt = "nyfort的BLOG" '加密 '注意KEY和IV只能用英文和數字,des是8個字元 EDes = EncryptDes(mytxt, "12345678", "abcdefgh") msgtxt = "nyfort的BLOG" & vbCrLf & "SHE加密" & vbCrLf & EDes MessageBox.Show(msgtxt, "SHE加密") '解密 mytxt = DecryptDes(EDes, "12345678", "abcdefgh") msgtxt = EDes & vbCrLf & "SHE解密" & vbCrLf & mytxt MessageBox.Show(msgtxt, "SHE解密")