生活随笔
收集整理的這篇文章主要介紹了
加密算法—MD5、RSA、DES
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最近因為要做一個加密的功能,簡單了解了一下加密算法,現(xiàn)在比較常用的有三個加密算法MD5加密算法、RSA加密算法、DES加密算法。
?
? ??MD5加密算法
? ? 定義:MD5算法是將任意長度的“字節(jié)串”變換成一個128bit的大整數(shù),并且它是一個不可逆的字符串變換算法,即使你看到源程序和算法描述,也無法將MD5的值變回原始的字符串。
? ? 應(yīng)用:在有些操作系統(tǒng)中,用戶的密碼是以MD5的方式保存的,用戶登錄時,系統(tǒng)吧用戶輸入的密碼計算成MD5中,然后和數(shù)據(jù)庫中保存的MD5值進(jìn)行比較,如果相同則登錄成功,如果不同則登錄失敗,而系統(tǒng)并不知道用戶的密碼是什么。
?
? ??RSA加密算法
? ? 定義:RSA既能用于數(shù)據(jù)加密,也能用于數(shù)字簽名。
? ? 原理:1、找出三個數(shù)p、q、r ? ?p、q是相異的中質(zhì)數(shù),?r?是與?(p-1)(q-1)?互質(zhì)的數(shù),p,?q,?r?這三個數(shù)便是?private?key
? ? ? ? ? ? ? ? 2、找出?m,?使得?rm =?1?mod?(p-1)(q-1)計算?n?=?pq ?m,?n?這兩個數(shù)便是?public?key?
? ? ? ? ? ?3、a是要加密的資料,?b?= a^m?mod?n,?(0?<=?b?<?n),b是加密后的資料
? ? ? ? ? ?4、?解密過程 a =?b^r?mod?pq?(0?<=?c?<?pq)
? ? 局限性:由于進(jìn)行的都是大數(shù)計算,速度一直是RSA的缺陷。一般來說只用于少量數(shù)據(jù)加密。?
?
? ??DES加密算法
? ? 有點:DES密碼體制的安全性應(yīng)該不依賴于算法的保密,其安全性僅以加密密鑰的保密為基礎(chǔ)(動態(tài)的生成key)
? ?原理:DES算法有三個參數(shù):Key、Data、Mode。其中Key為8個字節(jié)共64位,是DES算法的工作密鑰;Data也為8個字節(jié)64位,是要被加密或被解密的數(shù)據(jù);Mode為DES的工作方式,有兩種:加密或解密。?如Mode為加密,則用Key?去把數(shù)據(jù)Data進(jìn)行加密,?生成Data的密碼形式(64位)作為DES的輸出結(jié)果;如Mode為解密,則用Key去把密碼形式的數(shù)據(jù)Data解密,還原為Data的明碼形式(64位)作為DES的輸出結(jié)果。
? ? 應(yīng)用:我們最后使用的就是DES加密算法,但是由于用戶對數(shù)據(jù)的保密性并沒有高度的要求,所以我們沒有使用動態(tài)的key,而是使用了靜態(tài)的key.
? ? 加密程序
?
[html]?view plaincopy
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)??
?
? ? 調(diào)用?
[html]?view plaincopy
EDes?=?EncryptDes(DataData(j,?k).Value,?"12345678",?"abcdefgh")?? ?
?
? ? 解密
?
[html]?view plaincopy
<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>?? ?
?
? ? 調(diào)用
?
[html]?view plaincopy
<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>?? ?
?
? ? 這里,我們只是對這三個算法的簡單了解,這三個算法涉及的內(nèi)容是非常多的,有不對的地方請大牛們多多斧正。
轉(zhuǎn)載于:https://www.cnblogs.com/miercler/p/5471692.html
總結(jié)
以上是生活随笔為你收集整理的加密算法—MD5、RSA、DES的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。