加密演算法—MD5、RSA、DES
最近因為要做一個加密的功能,簡單瞭解了一下加密演算法,現在比較常用的有三個加密演算法MD5加密演算法、RSA加密演算法、DES加密演算法。
MD5加密演算法
定義:MD5演算法是將任意長度的“位元組串”變換成一個128bit的大整數,並且它是一個不可逆的字串變換演算法,即使你看到源程式和演算法描述,也無法將MD5的值變回原始的字串。
應用:在有些作業系統中,使用者的密碼是以MD5的方式儲存的,使用者登入時,系統吧使用者輸入的密碼計算成MD5中,然後和資料庫中儲存的MD5值進行比較,如果相同則登入成功,如果不同則登入失敗,而系統並不知道使用者的密碼是什麼。
RSA加密演算法
定義:RSA既能用於資料加密,也能用於數字簽名。
原理:1、找出三個數p、q、r p、q是相異的中質數, r 是與 (p-1)(q-1) 互質的數,p, q, r 這三個數便是 private key
2、找出 m, 使得 rm = 1 mod (p-1)(q-1)計算 n = pq m, n 這兩個數便是 public key
3、a是要加密的資料, b = a^m mod n, (0 <= b < n),b是加密後的資料
4、 解密過程 a = b^r mod pq (0 <= c < pq)
侷限性:由於進行的都是大數計算,速度一直是RSA的缺陷。一般來說只用於少量資料加密。
DES加密演算法
有點:DES密碼體制的安全性應該不依賴於演算法的保密,其安全性僅以加密金鑰的保密為基礎(動態的生成key)
原理:DES演算法有三個引數:Key、Data、Mode。其中Key為8個位元組共64位,是DES演算法的工作金鑰;Data也為8個位元組64位,是要被加密或被解密的資料;Mode為DES的工作方式,有兩種:加密或解密。 如Mode為加密,則用Key 去把資料Data進行加密, 生成Data的密碼形式(64位)作為DES的輸出結果;如Mode為解密,則用Key去把密碼形式的資料Data解密,還原為Data的明碼形式(64位)作為DES的輸出結果。
應用:我們最後使用的就是DES加密演算法,但是由於使用者對資料的保密性並沒有高度的要求,所以我們沒有使用動態的key,而是使用了靜態的key.
加密程式
Dim des As New System.Security.Cryptography.DESCryptoServiceProvider 'DES演算法
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.Cryp tography.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)
呼叫
EDes = EncryptDes(DataData(j, k).Value, "12345678", "abcdefgh")
解密
<span style="font-size:18px;"><strong> Dim des As New System.Security.Cryptography.DESCryptoServiceProvider 'DES演算法
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()</strong></span>
呼叫
<span style="font-size:18px;"><strong> UserEntity.userId = DecryptDes(mydataset.Tables(0).Rows(Count).Item(0), "12345678", "abcdefgh")
UserEntity.userName = DecryptDes(mydataset.Tables(0).Rows(Count).Item(1), "12345678", "abcdefgh")
UserEntity.passWord = DecryptDes(mydataset.Tables(0).Rows(Count).Item(2), "12345678", "abcdefgh")
UserEntity.realyName = DecryptDes(mydataset.Tables(0).Rows(Count).Item(3), "12345678", "abcdefgh")
UserEntity.phoneNumber = DecryptDes(mydataset.Tables(0).Rows(Count).Item(4), "12345678", "abcdefgh")
UserEntity.unitName = DecryptDes(mydataset.Tables(0).Rows(Count).Item(5), "12345678", "abcdefgh")
UserEntity.unitType = DecryptDes(mydataset.Tables(0).Rows(Count).Item(6), "12345678", "abcdefgh")
UserEntity.isDelete = DecryptDes(mydataset.Tables(0).Rows(Count).Item(7), "12345678", "abcdefgh")</strong></span>
這裡,我們只是對這三個演算法的簡單瞭解,這三個演算法涉及的內容是非常多的,有不對的地方請大牛們多多斧正。