rsa圖片加密
『壹』 RSA加密與對稱加密如何使用呢他們的混合應用又應該怎麼用呢
RSA演算法是第一個能同時用於加密和數字簽名的演算法。RSA演算法能生成公私鑰對。
假設A、B要通信,那麼他們需要彼此知道對方的公鑰,如果a向b發送信息,a先用自己的私鑰對信息進行加密(即簽名),然後用b的公鑰進行加密。當 b收到消息時,先用自己的私鑰進行解密,然後用a的公用進行解密(即驗證簽名),即可看到a發送的明文信息。
若是用對稱密鑰進行加密,則雙方公用一個密鑰,這個密鑰需要絕對保密,不能讓別人知道。a在向b發送信息前,先用這個密鑰對信息進行加密,然後把加密的信息發送給b,之後再把密鑰通過另一通道發送給b(要保證密鑰傳輸的安全,不被其他人截獲),b收到密文和密鑰後,再用這個密鑰進行解密,就可以得到原文。
若混合使用,假設還是a向b發送信息,a先用自己的私鑰進行簽名,然後再用雙方公用的對稱密鑰(即會話密鑰)進行加密,得到加密後的密文,然後用b的公鑰對雙方的會話密鑰進行加密,得到加密的會話密鑰,然後把加密的密文和加密的會話密鑰一起發給b,b收到後先用自己的私鑰對加密的會話密鑰進行解密,得到會話密鑰,再用會話密鑰對加密的密文進行解密,得到簽名的信息,然後用a的公鑰對簽名進行驗證,便可得到原始信息。
『貳』 RSA加解密原理以及三種填充模式
如果需要理解RSA的加密原理,需要理解以下理論:
等同於求一元二次方程 23 * d + 192 * y = 1
可以求得其中一解為(d=167,y=-20)
至此就完成了所有的計算
對於上述例子的到公鑰(221,23)和私鑰(221,167)
在上述的計算過程中一共用到了
上面用到的數中只有公鑰部分是公開的,即(221,23)。那麼我們是否可以通過公鑰來推到出私鑰部分,即已知n和e,推到出d?
(1)ed 1(mod (n)),只有知道 (n)才能解出d
(2) (n)= (p) (q)= (p-1) (q-1),只有知道p和q才能得到 (n)
(3)n=p q,就需要對n進行因式分解
那麼如果可以對n因式分解就可以求出d,也就意味著私匙被破解
那麼RSA加密的可靠性就在於對n因式分解的難度,而現在對一個整數n做因式分解並沒有巧妙的演算法,只有通過暴力破解計算。在實際應用中的n取值通常在1024位以上,而公開已知的可因式分解的最大數為768位。所以現階段來說RSA加密是可靠的。
現在我們就可以進行加密和解密了
我們使用上面生成的公鑰(221,23)來加密。如果我們需要加密的信息是m( m必須為整數並且m要小於n ),m取56,可以用以下公式求出加密串c:
c (mod n)
10 (mod 221)
可以求出加密後的結果c為10
密鑰為(221,167),加密結果c=10,可以使用以下公式求出被加密的信息
m (mod n) 即加密結果的d次方除以n的余數為m
56 (mod 221)
RSA加密屬於塊加密演算法,總是在一個固定長度的塊上進行操作。如果被加密的字元串過長,則需要對字元串進行切割,如果字元串過短則需要進行填充。
以下主介紹一下RSA_PKCS1_PADDING填充模式以及RSA_NO_PADDING模式
此填充模式是最常用的填充模式,在此填充模式下輸入的長度受加密鑰的長度限制,輸入的最大長度為加密鑰的位數k-11。如果公鑰的長度為1024位即128位元組,那麼輸入的長度最多為128-11=117位元組。如果長度小於117就需要填充。如果輸入T的長度為55位元組,填充後的塊為EM,則EM格式如下:
EM= 0x00 || BT || PS || 0x00 || T
在此填充模式下,輸入的長度最多和RSA公鑰長度一樣長,如果小於公鑰長度則會在前面填充0x00。如果公鑰長度是128位元組,輸入T的長度為55位元組,填充後的塊為EM,則EM格式如下:
EM=P || T
參考:
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
https://my.oschina.net/3pgp/blog/749195
『叄』 用C或者C++,用RSA演算法實現圖像加密
樓主你自己做了多少了?還是3個步驟都不會?其實3個步驟的原理都比較簡單,你參考下教科書和網路就行了。資料不要太多啊。。。
『肆』 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加密rsa加密
為了這道題把好幾年前學的東西重新看了一遍,累覺不愛。。。
不清楚你了不了解RSA過程,先跟說一下吧
隨機產生兩個大素數p和q作為密鑰對。此題:p=13,q=17,n =p*q=221
隨機產生一個加密密鑰e,使e 和(p-1)*(q-1)互素。此題:e=83
公鑰就是(n,e)。此題:(221,83)
通過e*d mod (p-1)*(q-1)=1生成解密密鑰d, ,n與d也要互素。此題:(d*83)≡1mod192
私鑰就是(n,d)。此題:(221,155)
之後發送者用公鑰加密明文M,得到密文C=M^e mod n
接受者利用私鑰解密M=C^d mod n
求解d呢,就是求逆元,de = 1 mod n這種形式就稱de於模數n說互逆元,可以看成de-ny=1,此題83e-192y=1.
用擴展的歐幾里得演算法。其實就是輾轉相除
此題:
192=2*83+26
83=3*26+5
26=5*5+1
求到余數為1了,就往回寫
1=26-5*5
=26-5*(83-3*26)
=(192-2*83)-5*(83-3*(192-2*83))
=16*192-37*83
則d=-37,取正後就是155.
記住,往回寫的時候數不該換的一定不要換,比如第二步中的26,一定不能換成(83-5)/3,那樣就求不出來了,最終一定要是192和83相關聯的表達式。還有,最好保持好的書寫格式,比如第一步2*83+26時第二步最好寫成3*26+5而不是26*3+5,要不步驟比較多的話容易亂
『陸』 Rsa是什麼意思
RSA加密演算法是一種非對稱加密演算法。在公開密鑰加密和電子商業中RSA被廣泛使用。RSA是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。
1973年,在英國政府通訊總部工作的數學家克利福德·柯克斯(Clifford Cocks)在一個內部文件中提出了一個相同的演算法,但他的發現被列入機密,一直到1997年才被發表。
(6)rsa圖片加密擴展閱讀
RSA的安全性依賴於大數分解,但是否等同於大數分解一直未能得到理論上的證明,因為沒有證明破解RSA就一定需要作大數分解。
假設存在一種無須分解大數的演算法,那它肯定可以修改成為大數分解演算法。 RSA 的一些變種演算法已被證明等價於大數分解。不管怎樣,分解n是最顯然的攻擊方法。人們已能分解多個十進制位的大素數。因此,模數n必須選大一些,因具體適用情況而定。
『柒』 RSA加密演算法的內容是怎樣的
1) 確定密鑰的寬度。
2) 隨機選擇兩個不同的素數p處q,它們的寬度是密鑰寬度的二分之一。
3) 計算出p和q的乘積n 。
4) 在2和Φ(n)之間隨機選擇一個數e , e 必須和Φ(n)互素,整數e用做加密密鑰(其中Φ(n)=(p-1)*(q-1))。
5) 從公式ed ≡ 1 mod Φ(n)中求出解密密鑰d 。
6) 得公鑰(e ,n ), 私鑰 (d , n) 。
7) 公開公鑰,但不公開私鑰。
8) 將明文P (假設P是一個小於n的整數)加密為密文C,計算方法為:
C = P^e mod n
9) 將密文C解密為明文P,計算方法為:
P = C^d mod n
然而只根據n和e(不是p和q)要計算出d是不可能的。因此,任何人都可對明文進行加密,但只有授權用戶(知道d)才可對密文解密
『捌』 RSA加密原理
RSA加密是一種非對稱加密。可以在不直接傳遞密鑰的情況下,完成解密。這能夠確保信息的安全性,避免了直接傳遞密鑰所造成的被破解的風險。是由一對密鑰來進行加解密的過程,分別稱為公鑰和私鑰。公鑰加密--私鑰解密,私鑰加密--公鑰解密
在 整數 中, 離散對數 是一種基於 同餘 運算和 原根 的一種 對數 運算。而在實數中對數的定義 log b a 是指對於給定的 a 和 b ,有一個數 x ,使得 b x = a 。相同地在任何群 G 中可為所有整數 k 定義一個冪數為 b K ,而 離散對數 log b a 是指使得 b K = a 的整數 k 。
當3為17的 原根 時,我們會發現一個規律
對 正整數 n,歐拉函數是小於或等於n的正整數中與n 互質 的數的數目(因此φ(1)=1)。有以下幾個特點
服務端根據生成一個隨機數15,根據 3 15 mod 17 計算出6,服務端將6傳遞給客戶端,客戶端生成一個隨機數13,根據 3 13 mod 17 計算出12後,將12再傳回給服務端,客戶端收到服務端傳遞的6後,根據 6 13 mod 17 計算出 10 ,服務端收到客戶端傳遞的12後,根據 12 15 mod 17 計算出 10 ,我們會發現我們通過 迪菲赫爾曼密鑰交換 將 10 進行了加密傳遞
說明:
安全性:
除了 公鑰 用到 n 和 e ,其餘的4個數字是 不公開 的(p1、p2、φ(n)、d)
目前破解RSA得到的方式如下:
缺點
RSA加密 效率不高 ,因為是純粹的數學演算法,大數據不適合RSA加密,所以我們在加密大數據的時候,我們先用 對稱加密 演算法加密大數據得到 KEY ,然後再用 RSA 加密 KEY ,再把大數據和KEY一起進行傳遞
因為Mac系統內置了OpenSSL(開源加密庫),所以我們開源直接在終端進行RSA加密解密
生成RSA私鑰,密鑰名為private.pem,密鑰長度為1024bit
因為在iOS中是無法使用 .pem 文件進行加密和解密的,需要進行下面幾個步驟
生成一個10年期限的crt證書
crt證書格式轉換成der證書
『玖』 RSA的加密技術
RSA是一種非對稱加密技術,也就是說加密密鑰和解密密鑰是不一樣的,而且不能互相推導,是基於大素數分解理論的一種演算法。常用於身份認證,數據簽名等方面。只要密鑰不被泄露,到目前為止還無法破解。
『拾』 RSA加密原理概述
歐拉函數通式: 若a可以寫成 a=P1^α1...Pn^αn,其中P1...Pn為素數,α1...αn為正整數,則我們有
φ(a) = (P1^(α1-1))(P1-1)...(Pn^(αn-1))(Pn-1),由此我們可得二元一次情況下的化簡,若a = pq(pq均為素數),有φ(a) =(p-1)(q-1)
歐拉定理:(a,m)= 1時,a^φ(m) = 1(modm)
//上述定理參見初等數論2第8-14頁。
若a,b是兩個互素的正整數,一定存在兩個數x,y使得ax+by=1,這里因為xy可以做正負變化,所以寫成ax-by = 1也行
即,若a,b>0且(a,b)= 1,一定存在兩個數使 ax = 1(modb)
//參見初等數論1第45頁
a=b(modm)時,有a^n=b^n(modm)
//初等數論1第58頁
我們取兩個大素數pq,並令他們的積為模數n。
根據通式,我們有φ(n) =(p-1)(q-1)
取與φ(n)互素且小於φ(n)的公鑰e,則一定存在e的逆元d使得 ed = 1(modφ(n)),取d為私鑰
假設我們需要給消息M加密,我們的消息M必須與n互素,又由於n=pq,M只需要小於n且不等於p或者q即可。
加密時,我們求得加密數 C1 = M^e(modn)
解密時,我們求得解密數 C2 = C1^d(modn)
所以加密時,我們需要<e,n>對,而解密時,我們需要<d,n>對。
我們將要來證明C2=M:
因為 (M^e(modn))^d = M^ed(modn),所以有 C2 = M^ed(modn),
因為ed = 1+ kφ(n),所以有C2 = M^(1+kφ(n))(modn ) = M*(M^φ(n))^k(modn)
因為歐拉定理有M^φ(n) = 1(modn),所以C2 = M(modn),又因為C2與M運算過程中恆小於n,所以C2=M。
總結一下 C2 = C1^d(modn) = M^ed(modn) = M^(1+kφ(n))(modn) = M(modn)。
而秘鑰運算的條件是,e與φ(n)互素,且M與n互素。
公鑰和私鑰是一對一的關系,因為私鑰取的是公鑰關於模數n的1(modφ(n))的逆元,所以公私鑰是一對一的關系,不管公鑰還是私鑰改變,逆元一定會跟著改變。
雖然公鑰和私鑰都可以通過增加n的整數倍使其對n的余數不變,但是同餘的新公鑰是沒有意義的,因為n是暴露在公鑰里的。