最近因為要做一個加密的功能,簡單了解了一下加密算法,現在比較常用的有三個加密算法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>??
?
?
? ? 這里,我們只是對這三個算法的簡單了解,這三個算法涉及的內容是非常多的,有不對的地方請大牛們多多斧正。