1. 程式人生 > >加密演算法—MD5、RSA、DES

加密演算法—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>
    這裡,我們只是對這三個演算法的簡單瞭解,這三個演算法涉及的內容是非常多的,有不對的地方請大牛們多多斧正。