2017-11-29 5 views
0

AES/ECB/PKCS5Padding을 사용하여 문자열을 인코딩해야합니다. 암호화 된 결과 (바이트를 원하지 않는 새 String (encryptedResult))는 파트너에게 전송됩니다. 그런 다음 내 파트너는 getBytes()를 사용하여 문자열의 암호를 해독합니다. 패딩 암호화와 암호 해독 할 때 입력 길이는 16의 배수 여야합니다 :자바 암호화/암호 해독 때문에 패딩 때문에 작동하지 않습니다

public static String decrypter(final String donnees) throws NoSuchAlgorithmException, NoSuchPaddingException, 
     InvalidKeyException, IllegalBlockSizeException, BadPaddingException { 
    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); 
    cipher.init(Cipher.DECRYPT_MODE, key); 

    return new String(cipher.doFinal(donnees.getBytes())); 
} 

내 문제는 내가 해독하려고 할 때이 오류가 있다는 것입니다 : 여기

는 복호화 방법입니다.

바이트를 직접 디코드하면 정상적으로 작동합니다. string.getBytes()를 패딩이 느슨하지 않게하려면 어떻게해야합니까? 아니면 다른 솔루션?

나는 암호 해독을 변경할 수 없으며 파트너에게 전송 된 바이트가 아니라 문자열에 대해서도 마찬가지입니다.

+3

바이트를 String처럼 변환 할 수는 없습니다. 적어도 8 비트 인코딩을 사용하거나 Base64와 같은 것을 사용하는 것이 좋습니다. – Kayaman

+1

https://stackoverflow.com/questions/1536054/how-to-convert-byte-array-to-string-and-vice-versa – Oleg

+0

두 분 모두 덕분에 문제가 해결되었습니다. 나는 바이트가 어떻게 작동하는지에 대해 꽤 잘못된 이해를했다. –

답변

1

패딩 오류는 일반적으로 암호 해독 실패를 의미하며 오류에는 잘못된 키, 데이터 및 인코딩이 포함될 수 있습니다. 잘못된 암호 해독은 부적절한 패딩을 생성하는 부작용이 있습니다.

이 경우 암호화 된 데이터의 잘못된 인코딩입니다. 암호화 된 데이터가 문자열로 필요하면 일반적인 방법은 Base64 또는 16 진수 인코딩을 사용하는 것입니다.

이 코드는 올바르지 않습니다. new String(cipher.doFinal(donnees.getBytes()));