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 바이트입니다.자바에서 복어를 사용할 때 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