2011-07-27 3 views
1

나는 내 코드에서 버그에 갇혀 있었고 제대로 해독하지 못했습니다! 8 바이트의 데이터 만 dataBytes에 전달하고 24 바이트 키를 keyBytes에 전달합니다. 해독 된 데이터를 바이트 배열로 반환하려고합니다. 나쁜 채우기 예외가 계속 발생합니다.데 코드를 사용하여 암호 해독 버그, javax.crypto.badpaddingexception

감사합니다. 여기

는 코드입니다 :

private static byte[] DESEdeDecrypt(byte[] keyBytes, byte[] dataBytes){ 

    byte[] decryptedData = null; 
    try{ 
     DESedeKeySpec keySpec = new DESedeKeySpec(keyBytes, 0); 
     SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede"); 
     SecretKey key = keyFactory.generateSecret(keySpec); 
     Cipher cipher = Cipher.getInstance("DESede"); 
     cipher.init(Cipher.DECRYPT_MODE, key); 
     decryptedData = cipher.doFinal(dataBytes); 
    } 
    catch(Exception e){System.out.println(e);} 

    return decryptedData; 
+0

반대편에 패딩을 지정하지 않은 경우 "DESede/ECB/NoPadding"을 사용하십시오 ... –

답변

1

당신은 암호화 할 수처럼 해독하기 위해 같은 패딩을 사용해야합니다. 기본값에 의존하는 것이 아니라 명시 적으로 설정하는 것이 좋습니다. 또한 양쪽 끝의 모드를 지정하는 것이 가장 좋습니다.

Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding"); 

DESede가 느리고 노후됩니다. 이전 코드와의 호환성을 제외하고는이 코드를 사용하지 마십시오. 새로운 작업을 위해서는 AES를 사용하는 것이 좋습니다.

+0

+1 AES 제안 용 – Qwerky