2011-10-18 2 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 바이트입니다.자바에서 복어를 사용할 때 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 라이브러리를 사용하여 블록 크기 문제에서

관련 문제