2011-10-18 13 views
1
String key = "my_own_key_which_should_be_quite_long"; 
byte[] keyData = key.getBytes(); 
SecretKeySpec myKey = new SecretKeySpec(keyData, "Blowfish"); 
Cipher cipher = Cipher.getInstance("Blowfish"); 
cipher.init(Cipher.ENCRYPT_MODE, myKey); 
String input = "string to encrypt"; 
try { 
    byte[] encrypted = cipher.doFinal(input.getBytes()); 
    System.out.println(new String(encrypted)); 
} catch (Exception ex) { 
    ex.printStackTrace(); 
} 

javax.crypto.IllegalBlockSizeException:7つの末尾のバイトがdoFinalメソッドによってスローされます。何が問題ですか? 最も興味深いのは、キーストリングの長さにかかわらず、例外は常に同じです - 末尾の7バイトです。Javaでblowfishを使用すると、javax.crypto.IllegalBlockSizeExceptionが発生する

+0

さておき、この問題を解決した、あなたは*本当に*バイト配列に文字列を変換するために、プラットフォームのデフォルトのエンコーディングを使用しないでください、あなたは試すべきではありません不透明なバイナリデータ(暗号化されたバイト配列)をそのような文字列に変換するには - base64を使用します。 –

+0

[可能な複製の方法:javax.crypto.IllegalBlockSizeException:ブロックされていないサイズのデータ​​をブロックする](http://stackoverflow.com/質問/ 4062015/how-to-solve-javax-crypto-illegalblocksizeexception-data-not-block-size-aligned) –

+0

OMFG、Jon Skeetは私の人生が意味でいっぱいの – Sergey

答えて

1

とにかく、Gnucryptoライブラリを使用すると、ブロックサイズの問題から

関連する問題