コードを投稿する前に、まず2つのものをレイアウトするのが最善だと思います。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(プライベート指数)、指数として適用、長い間大きなへの道だったという事実でした。私はすばらしいGoogle検索を行い、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のような番号を保存できるのですか?もしそうなら、どのように?
ビッグ質問:
どのように復号化を実行するために必要な値を保存することができますか?
私を助けてくれてありがとうございます。
暗号化計算が29からのほとんどの値について間違った結果を生むときに、値が28までしかテストされないのはわかりません。また、復号化も同様にmod n:m = c^d mod n 。また、exponentiateとmoduloを別々に行うのはあなたのおもちゃのサイズにはあまり実用的ではありませんが、安全なサイズのためにそれを行うのはあなたの生涯(またはあなたのコンピュータ)よりもずっと長くかかるでしょう。そのため実際の実装はWikipediaで説明されているようにインターリーブしますあなたはbignumsをまったく必要としません。 –