在我發佈我的代碼之前,我認爲最好先佈置幾件事情。在java中存儲大量的RSA加密
目標:
一對夫婦少量的執行非常基本的RSA加密。對於那些熟悉RSA加密的人,我已經發布了下面算法使用的值。
當前RSA數字/值:
P = 29
Q = 31
N = P * Q
披=((P-1)*(Q -1))
E = 11
我的問題:
當我試圖解密我的代碼時出現問題。加密按設計工作。
代碼:
long[] mesg = new long[]{8, 7, 26, 28};
long[] encrypted_mesg = new long[mesg.length];
for(int i=0; i<mesg.length; i++){
encrypted_mesg[i]=(long)((Math.pow(mesg[i],E))%N);
System.out.print(encrypted_mesg[i] + " ");
}
System.out.println();
//Decrpyt (not functioning-long to small, Big Integer not working)
for(int j=0; j<encryp_mesg.length; j++){
BigInteger decrypt = new BigInteger(Math.pow(encryp_mesg[j],D) + "");
System.out.print(decrypt.toString() + " ");
}
最初的問題是事實,d(私有指數),當作爲指數應用,是方式大長。我做了一個快速的谷歌搜索,並決定嘗試和實施BigInteger。當我運行程序時,它拋出這個錯誤:
Exception in thread "main" java.lang.NumberFormatException: For input string: "Infinity"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.math.BigInteger.<init>(BigInteger.java:461)
at java.math.BigInteger.<init>(BigInteger.java:597)
at RSA_Riddles.main(RSA_Riddles.java:23)**
我試圖來解決這個問題:
說實話,我沒試過真的沒有什麼東西,因爲我知道答案不計算到無窮大,但BigInteger認爲它的確如此。無論如何,我可以存儲一個數字,如130^611?如果是這樣,怎麼樣?
大問題:
我如何可以存儲執行解密所需的值?
預先感謝任何嘗試和幫助我的人!
我不知道它是設計還是運氣,你只測試值高達28時,當你的加密計算產生了錯誤的結果,從大多數值29以上解密同樣應該是mod n:m = c^d mod n 。另外,對於你的玩具尺寸來說,冪指數和模數分別對於你的玩具尺寸幾乎沒有實際意義,但是爲了安全尺寸而做它會比你的一生(或者你的計算機)要長得多,所以實際的實現會像維基百科中解釋的那樣交錯 - 然後是玩具大小你根本不需要bignums。 –