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が発生する
さておき、この問題を解決した、あなたは*本当に*バイト配列に文字列を変換するために、プラットフォームのデフォルトのエンコーディングを使用しないでください、あなたは試すべきではありません不透明なバイナリデータ(暗号化されたバイト配列)をそのような文字列に変換するには - base64を使用します。 –
[可能な複製の方法:javax.crypto.IllegalBlockSizeException:ブロックされていないサイズのデータをブロックする](http://stackoverflow.com/質問/ 4062015/how-to-solve-javax-crypto-illegalblocksizeexception-data-not-block-size-aligned) –
OMFG、Jon Skeetは私の人生が意味でいっぱいの – Sergey