混合加密算法(RSA和DES)


一、混合加密的理由

  a、前面提及了RSA加解密算法DES加解密算法這兩種加解密算法,由於隨着計算機系統能力的不斷發展,DES的安全性比它剛出現時會弱得多,追溯歷史破解DES的案例層出不窮,一台實際的機器可以在數天內破解DES是讓某些人相信他們不能依賴DES的安全性的唯一方法。而相對於DES,RSA的安全性則相對高些,雖然破解RSA的案例也有,但其所付出的代價是相對大的(相對DES),如今RSA的密鑰也在升級,這說明破解RSA的難度也在增大。

  b、在RSA加解密算法中提及到RSA加密明文會受密鑰的長度限制,這就說明用RSA加密的話明文長度是有限制的,而在實際情況我們要進行加密的明文長度或許會大於密鑰長度,這樣一來我們就不得不舍去RSA加密了。對此,DES加密則沒有此限制。

  鑒於以上兩點(個人觀點),單獨的使用DES或RSA加密可能沒有辦法滿足實際需求,所以就采用了RSA和DES加密方法相結合的方式來實現數據的加密。

  其實現方式即:

  1、信息(明文)采用DES密鑰加密。

  2、使用RSA加密前面的DES密鑰信息。

  最終將混合信息進行傳遞。

  而接收方接收到信息后:

  1、用RSA解密DES密鑰信息。

  2、再用RSA解密獲取到的密鑰信息解密密文信息。

  最終就可以得到我們要的信息(明文)。

二、實現例子:

結合前面RSA和DES加密:

/// <summary>
/// RSA和DES混合加密
/// </summary>
/// <param name="data">待加密數據</param>
/// <param name="publicKey">RSA公鑰</param>
/// <returns></returns>
public Param Encrypt(string data, string publicKey)
{
    //加密數據
    DESSecurity DES = new DESSecurity();
    string DESKey = DES.GenerateKey();
    string encryptData = DES.Encrypt(data, DESKey);

    //加密DESkey
    RSASecurity RSA = new RSASecurity();
    string encryptDESKey = RSA.Encrypt(DESKey, publicKey);

    Param mixParam = new Param();
    mixParam.DESKey = encryptDESKey;
    mixParam.Data = encryptData;
    return mixParam;
}

/// <summary>
/// RSA和DES混合解密
/// </summary>
/// <param name="data">待解密數據</param>
/// <param name="key">帶解密的DESKey</param>
/// <param name="privateKey">RSA私鑰</param>
/// <returns></returns>
public string Decrypt(string data, string key, string privateKey)
{
    //解密DESKey
    RSASecurity RSA = new RSASecurity();
    string DESKey = RSA.Decrypt(key, privateKey);

    //解密數據
    DESSecurity DES = new DESSecurity();
    return DES.Decrypt(data, DESKey);
}

Demo下載:MixCrypto.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM