質問内容
ファイルから読み込んだ暗号済のデータを複合化したいのですがデータが大きすぎるというエラーが発生しています。
エラーの原因と解決方法を教えてください。
追記:gpgコマンド作成したファイルをjavaで読み込み復号化するというのが実現したいことです。
質問内容のエラーが出ているのはjavaでファイルを読み込む際にいらない部分を削ったり変換をかけてから復号化処理しないといけないのでは?と予想しています。
追記(4/1):PGPのascii-armorはRadix-64でエンコードされているようです。そのため、PGP MESSAGEをRadix-64でデコードするとデータ量が減って今出ているエラーが出なくなるのではと予想しました。その仮定でjavaでRadix-64でデコードするコードかコードが紹介されているページのアドレスを教えていただければ。解決済にしたいと思いますのでよろしくお願いします。
(参考にしたページ:https://kiririmode.hatenablog.jp/entry/20151101/1446303600)
発生している問題・エラーメッセージ
Exception in thread "main" javax.crypto.IllegalBlockSizeException: Data must not be longer than 512 bytes
at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:344)
at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389)
at javax.crypto.Cipher.doFinal(Cipher.java:2047)
at decrypt.Test_bc.decrypt(Test_bc.java:75)
at decrypt.Test_bc.decryptFile(Test_bc.java:58)
at decrypt.Test_bc.main(Test_bc.java:38)
該当のソースコード
java
1 private static byte[] decrypt(Key key, File encryptFile) throws GeneralSecurityException, IOException { 2 3 FileInputStream fileInputStream = new FileInputStream(encryptFile); 4 byte[]bFile = new byte[(int) encryptFile.length()]; 5 System.out.println(encryptFile.length()); 6 fileInputStream.read(bFile); 7 8 Cipher cipher = Cipher.getInstance("RSA"); 9 cipher.init(Cipher.DECRYPT_MODE, key); 10 cipher.update(bFile); 11 return cipher.doFinal(); 12 } 13
以下は復号化したいファイルのサンプルです。
(RSA,2048bit,アスキーで暗号化したサンプル,576バイト)
-----BEGIN PGP MESSAGE----- Version: GnuPG v2.0.22 (GNU/Linux) hQEMA6ELKNZJ5TEuAQf/bv4liFSmWeqMCiiOuiZcwUFYmraW37TL4daEH8uJfYi3 MDw8+4BjmlSmsENYYinOrR0+xsVECeQWFTsigTOveUc7VmEUrWDoO6Gt8n8aVP8L 34LAUq6b5kZESSBpb/0HBlz3nZLiPSlO00ljrmJRqSo8pJoV3tnHac/fmj8CRYRE PNwCJrl7/8cJqxevLLPNT61Yh6mfUJR/xiiGispDNOFUvtdf20tcYpvbeBg+ZLX5 5cktnZfnIdNyArmNpO/MYjMa+5dcl3cxHIKgVRFd5tKSu/Dou96EqUc5zEYaG0fR rzCKu0/iTPFiBIEr7fqWw1ik/P06Pbxraan5QybjIdJPAc0KB8zxrZursq25ZToT R9KETMeWXJ603Jsm6XTTnNVFwmBUjyyjdlI7KDUV7K5ObeFfkVAO4R4o0hau4oom NNcEQsegz5bek+SDU53/Tg== =2Lpl -----END PGP MESSAGE-----
試したこと
暗号化できるデータのサイズを上げるため鍵長を4096ビットまで上げました。
元のファイルサイズを小さくするためにファイルの中身を1文字にして試しましたが暗号化後のデータサイズは601バイトまでしか減らせませんでした。
・試しに実行して成功したパターン:元のファイル(1文字、1バイト)→暗号化(gpgコマンド)→暗号化したファイル(601バイト)→複合化(gpgコマンド)→複合化後のファイル(1文字、1バイト)で成功
・今回実現したい処理:元のファイル(1文字、1バイト)→暗号化(gpgコマンド)→暗号化したファイル(601バイト)→複合化(javaのプログラム)→記載しているエラーが発生
補足情報(FW/ツールのバージョンなど)
バージョンなど
eclipse 4.11.0
java 8
あなたの回答
tips
プレビュー