2

BigIntegerを使用してJavaでファイルのRSA暗号化と復号化を実装しようとしています。

パラメータp、q、e、n、dがあります

ファイルをbyte[]に読み込みました

System.out.println("Opening file: " + infile);
File file = new File(infile);
FileInputStream fis = new FileInputStream(file);
int filelength = (int)file.length();
byte[] filecontent = new byte[filelength];
fis.read(filecontent);
fis.close();

そして、そのバイトからBigIntegerを作成します[]

BigInteger plaintext = new BigInteger(filecontent);

次に、暗号化は単純です

BigInteger ciphertext = plaintext.modPow(e, n);

そして、暗号文を新しい暗号化ファイルに書き込みます

FileOutputStream fos = new FileOutputStream(outfile);
fos.write(ciphertext.toByteArray());
fos.close();

復号化はほとんど同じです

BigInteger plaintext = ciphertext.modPow(d, n);

小さなテキストファイルで最初にテストしたとき、これは完全にうまく機能しました。暗号化と復号化は問題なく行われました。ただし、jpgやzipなどの他のファイルでテストを開始すると、すべてがバラバラになりました。問題のデバッグを正確に特定することはできませんが、ファイルbyte []からBigIntegerに変換すると、BigIntegerオブジェクトが空になることがあります。

暗号化する前にbyte[]に対して何かしなければならないことはありますか?

4

1 に答える 1