古詩詞大全網 - 個性簽名 - 非對稱加密之-RSA加密

非對稱加密之-RSA加密

對壹個大整數進行因數分解,在高等數學中叫做費馬大定理,至今沒有被破解

RSA算法是最流行的公鑰密碼算法,使用長度可以變化的密鑰。RSA是第壹個既能用於數據加密也能用於數字簽名的算法。

這是目前地球上最重要的加密算法

至此,所有計算完成。

將 n和e封裝成公鑰 , n和d封裝成私鑰 。

回顧上面的密鑰生成步驟,壹***出現六個數字:

這六個數字之中,公鑰用到了兩個(n和e),其余四個數字都是不公開的。其中最關鍵的是d,因為n和d組成了私鑰,壹旦d泄漏,就等於私鑰泄漏。

那麽, 有無可能在已知n和e的情況下,推導出d?

最終轉換成->結論: 如果n可以被因數分解,d就可以算出,也就意味著私鑰被破解。

第壹步 :首先生成秘鑰對

第二步 :公鑰加密

第三步 :私鑰解密

幾個全局變量解說:

關於加密填充方式:之前以為上面這些操作就能實現rsa加解密,以為萬事大吉了,呵呵,這事還沒完,悲劇還是發生了, Android這邊加密過的數據,服務器端死活解密不了, ,這造成了在android機上加密後無法在服務器上解密的原因,所以在實現的時候這個壹定要註意

實現分段加密:搞定了填充方式之後又自信的認為萬事大吉了,可是意外還是發生了,RSA非對稱加密內容長度有限制,1024位key的最多只能加密127位數據,否則就會報錯(javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes) , RSA 是常用的非對稱加密算法。最近使用時卻出現了“不正確的長度”的異常,研究發現是由於待加密的數據超長所致。RSA 算法規定:待加密的字節數不能超過密鑰的長度值除以 8 再減去 11(即:KeySize / 8 - 11),而加密後得到密文的字節數,正好是密鑰的長度值除以 8(即:KeySize / 8)。

愛麗絲選擇了61和53。(實際應用中,這兩個質數越大,就越難破解。)

愛麗絲就把61和53相乘

n的長度就是密鑰長度。3233寫成二進制是110010100001,壹***有12位,所以這個密鑰就是12位。實際應用中,RSA密鑰壹般是1024位,重要場合則為2048位

愛麗絲算出φ(3233)等於60×52,即3120。

愛麗絲就在1到3120之間,隨機選擇了17。(實際應用中,常常選擇65537。)

所謂 "模反元素" 就是指有壹個整數d,可以使得ed被φ(n)除的余數為1。

這個式子等價於

於是,找到模反元素d,實質上就是對下面這個二元壹次方程求解。

已知 e=17, φ(n)=3120,

至此所有計算完成

在愛麗絲的例子中,n=3233,e=17,d=2753,所以公鑰就是 (3233,17),私鑰就是(3233, 2753)。

實際應用中,公鑰和私鑰的數據都采用 ASN.1 格式表達

回顧上面的密鑰生成步驟,壹***出現六個數字:

這六個數字之中,公鑰用到了兩個(n和e),其余四個數字都是不公開的。其中最關鍵的是d,因為n和d組成了私鑰,壹旦d泄漏,就等於私鑰泄漏。

那麽,有無可能在已知n和e的情況下,推導出d?

結論:如果n可以被因數分解,d就可以算出,也就意味著私鑰被破解。

可是,大整數的因數分解,是壹件非常困難的事情。目前,除了暴力破解,還沒有發現別的有效方法。維基百科這樣寫道

舉例來說,妳可以對3233進行因數分解(61×53),但是妳沒法對下面這個整數進行因數分解。

它等於這樣兩個質數的乘積

事實上,RSA加密的方式原理是壹個高等數學中沒有被解決的難題,所有沒有可靠的RSA的破解方式