一、混合加密的理由
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
