rsa加密大數據
PQ的積M叫做模,模規定了這個數字空間中最大的數,是這個空間的邊界,這個空間中所有的數都要小於模M,包括被加密的消息塊。所以如果消息(a1,a2,a3...)任何一個超過了M,加密後都無法正切解密,因為加密後和解密後得到的數都在這個空間中,不可能得到一個大於M的數。
但是如果用來加密的消息A大於M,解密後得到的結果加上K倍的M一定會等於A,因為加密的過程是做模乘操作,大於M的消息A首先被除M然後取余數了,該余數一定小於M,然後所有的加密操作都是針對該余數來進行的,想要還原A的話用該A模M的余數加上數倍的M就可以了。解密的話還原的也是該余數,得到余數後還原A,也是加上數倍的M就可以了。
實質上RSA的加密有個條件,消息A必須要小於M。
❷ RSA加密解密無法對大數進行加密解密
推薦您可以下載超級加密3000試試。
超級加密 3000採用先進的加密演算法,使你的文件和文件夾加密後,真正的達到超高的加密強度,讓你的加密數據無懈可擊。
建議您可以下載試試。
❸ RSA中都是很大的數進行運算,特別是乘模運算和冪模運算,計算機如何去表示這些大數並進行快速有效的運算
RSA沒有快速有效運算,不適合大數據加密解密。
❹ php中RSA加密,明文超長,需要分段加密該怎麼做
一般來說,加密分為兩個部分,一個是非對稱加密,一個是對稱加密,使用對稱加密加密正文信息,使用非對稱加密加密對稱加密的密鑰,然後發送加密數據(消息
摘要和數字簽名就不討論了),這是正規的數據加密策略,對稱加密默認支持大數據分段加密策略,你只需要從介面中完成加密即可,而且對稱加密速度比非對稱加
密快很多,如果你需要使用這個策略建議使用AES。
如果你不願意使用對稱加密,只願意使用AES加密,那你就必須喪失速度了,而且自己處理分段加密,因為RSA加密通常是117個位元組就要分段(這
個長度可能和密鑰長度有關,我是用的介面是117),你需要自己把數據變成N個117位元組的數據段來完成加密,解密也需要自己完成位元組拼裝。
❺ rsa演算法原理
RSA演算法是最常用的非對稱加密演算法,它既能用於加密,也能用於數字簽名。RSA的安全基於大數分解的難度。其公鑰和私鑰是一對大素數(100到200位十進制數或更大)的函數。從一個公鑰和密文恢復出明文的難度,等價於分解兩個大素數之積。
我們可以通過一個簡單的例子來理解RSA的工作原理。為了便於計算。在以下實例中只選取小數值的素數p,q,以及e,假設用戶A需要將明文「key」通過RSA加密後傳遞給用戶B,過程如下:設計公私密鑰(e,n)和(d,n)。
令p=3,q=11,得出n=p×q=3×11=33;f(n)=(p-1)(q-1)=2×10=20;取e=3,(3與20互質)則e×d≡1 mod f(n),即3×d≡1 mod 20。通過試算我們找到,當d=7時,e×d≡1 mod f(n)同餘等式成立。因此,可令d=7。從而我們可以設計出一對公私密鑰,加密密鑰(公鑰)為:KU =(e,n)=(3,33),解密密鑰(私鑰)為:KR =(d,n)=(7,33)。
英文數字化。將明文信息數字化,並將每塊兩個數字分組。假定明文英文字母編碼表為按字母順序排列數值。則得到分組後的key的明文信息為:11,05,25。
明文加密。用戶加密密鑰(3,33) 將數字化明文分組信息加密成密文。由C≡Me(mod n)得:
C1(密文)≡M1(明文)^e (mod n) == 11≡11^3 mod 33 ;
C2(密文)≡M2(明文)^e (mod n) == 26≡05^3 mod 33;
C3(密文)≡M3(明文)^e (mod n) == 16≡25^3 mod 33;
所以密文為11.26.16。
密文解密。用戶B收到密文,若將其解密,只需要計算,即:
M1(明文)≡C1(密文)^d (mod n) == 11≡11^7 mod 33;
M2(明文)≡C2(密文)^d (mod n) == 05≡26^7 mod 33;
M3(明文)≡C3(密文)^d (mod n) == 25≡16^7 mod 33;
轉成明文11.05.25。根據上面的編碼表將其轉換為英文,我們又得到了恢復後的原文「key」。
當然,實際運用要比這復雜得多,由於RSA演算法的公鑰私鑰的長度(模長度)要到1024位甚至2048位才能保證安全,因此,p、q、e的選取、公鑰私鑰的生成,加密解密模指數運算都有一定的計算程序,需要仰仗計算機高速完成。
❻ 編寫程序實現RSA演算法對數據進行加密和解密
RSA演算法是非對稱演算法,要配合公鑰和私鑰機制實現加密和解密,如果常規大數據量的加密和解密,還是用對稱加密演算法效率高。
你的問題涉及內容很多,建議找《精通PKI網路安全認證技術與編程實現》來看,裡面對具體的應用介紹的很清楚
❼ 如何使用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);
❽ RSA加密演算法中提到「大數」,什麼是「大數」呢
足夠大的素數...比方說上萬的素數
❾ RSA演算法加密
RSA加密演算法是一種典型的非對稱加密演算法,它基於大數的因式分解數學難題,它也是應用最廣泛的非對稱加密演算法,於1978年由美國麻省理工學院(MIT)的三位學著:Ron Rivest、Adi Shamir 和 Leonard Adleman 共同提出。
它的原理較為簡單,假設有消息發送方A和消息接收方B,通過下面的幾個步驟,就可以完成消息的加密傳遞:
消息發送方A在本地構建密鑰對,公鑰和私鑰;
消息發送方A將產生的公鑰發送給消息接收方B;
B向A發送數據時,通過公鑰進行加密,A接收到數據後通過私鑰進行解密,完成一次通信;
反之,A向B發送數據時,通過私鑰對數據進行加密,B接收到數據後通過公鑰進行解密。
由於公鑰是消息發送方A暴露給消息接收方B的,所以這種方式也存在一定的安全隱患,如果公鑰在數據傳輸過程中泄漏,則A通過私鑰加密的數據就可能被解密。
如果要建立更安全的加密消息傳遞模型,需要消息發送方和消息接收方各構建一套密鑰對,並分別將各自的公鑰暴露給對方,在進行消息傳遞時,A通過B的公鑰對數據加密,B接收到消息通過B的私鑰進行解密,反之,B通過A的公鑰進行加密,A接收到消息後通過A的私鑰進行解密。
當然,這種方式可能存在數據傳遞被模擬的隱患,但可以通過數字簽名等技術進行安全性的進一步提升。由於存在多次的非對稱加解密,這種方式帶來的效率問題也更加嚴重。
❿ 什麼是RSA演算法,求簡單解釋。
RSA公鑰加密演算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美國麻省理工學院)開發的。RSA取名來自開發他們三者的名字。RSA是目前最有影響力的公鑰加密演算法,它能夠
抵抗到目前為止已知的所有密碼攻擊,已被ISO推薦為公鑰數據加密標准。RSA演算法基於一個十分簡單的數論事實:將兩個大素數相乘十分容易,但那時想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。由於進行的都是大數計算,使得RSA最快的情況也比DES慢上好幾倍,無論是軟體還是硬體實現。速度一直是RSA的缺陷。一般來說只用於少量數據加密。RSA的速度比對應同樣安全級別的對稱密碼演算法要慢1000倍左右。
基礎
大數分解和素性檢測——將兩個大素數相乘在計算上很容易實現,但將該乘積分解為兩個大素數因子的計算量是相當巨大的,以至於在實際計算中是不能實現的。
1.RSA密碼體制的建立:
(1)選擇兩個不同的大素數p和q;
(2)計算乘積n=pq和Φ(n)=(p-1)(q-1);
(3)選擇大於1小於Φ(n)的隨機整數e,使得gcd(e,Φ(n))=1;
(4)計算d使得de=1mod Φ(n);
(5)對每一個密鑰k=(n,p,q,d,e),定義加密變換為Ek(x)=xemodn,解密變換為Dk(x)=ydmodn,這里x,y∈Zn;
(6)以{e,n}為公開密鑰,{p,q,d}為私有密鑰。
2.RSA演算法實例:
下面用兩個小素數7和17來建立一個簡單的RSA演算法:
(1)選擇兩個素數p=7和q=17;
(2)計算n=pq=7 17=119,計算Φ(n)=(p-1)(q-1)=6 16=96;
(3)選擇一個隨機整數e=5,它小於Φ(n)=96並且於96互素;
(4)求出d,使得de=1mod96且d<96,此處求出d=77,因為 77 5=385=4 96+1;
(5)輸入明文M=19,計算19模119的5次冪,Me=195=66mod119,傳出密文C=66;(6)接收密文66,計算66模119的77次冪;Cd=6677≡19mod119得到明文19。