2011-10-16 3 views
0

Possible Duplicate:
Java AES Encrypt Entire StringJava AES 암호 해독 - 문자열의 암호를 해독 할 수 없습니다.

작은 문제가 발생했습니다. 어떤 이유로, 나는 그들을 암호화하는 동일한 방법을 사용하여 일부 문자열을 해독 할 수 없습니다. 예를 들어, 내가 해독이 코드를 사용하고 있습니다 :

어쨌든
 SecretKeySpec key = new SecretKeySpec(salt.getBytes(), "AES"); 
    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", "SunJCE"); 
    cipher.init(Cipher.DECRYPT_MODE, key); 
    String result = new String(cipher.doFinal(message)); 

    System.out.println("Decrypted:" + result); 

, 소금은 "1231231231231231"하고 해독하려고 메신저 메시지가 "읽기"인 경우.

Exception in thread "main" javax.crypto.BadPaddingException: Given final block not properly padded 

그러나 암호기 (동일한 방식으로 작동하는) 나는이 문제를 해결하거나 문자열을 입력에서 사용자를 피할 수있는 방법 암호화 된 값이

I¡?Þd↨Ú#à, 7êLO* 

말한다 :이 오류가? Thansk

+1

* "지저분한 것을 무시하십시오."* 아무 문제가 없지만 나는 단지 귀하의 게시물을 무시할 것입니다. –

+1

그것은 '주의 뱉어'로 내려 가야합니다. 특히 [낙오자와 마찬가지로 반응하지 않음] (http : //)과 관련하여 [Smart Way에 대한 질문 방법 (http://catb.org/~esr/faqs/smart-questions.html)]을 읽어 보는 것이 좋습니다. catb.org/~esr/faqs/smart-questions.html#not_losing). 행운을 빕니다! –

+1

"... 암호화 할 메시지가 '읽음'입니다.": 암호 해독하려고하지 않습니까? 위의 함수와 동일한 패딩을 사용하여 암호화 연산의 결과를 전달해야합니다. – vhallac

답변

0

해결 방법 : 문자열로 저장하지 마십시오.

Cipher.doFinal에 대한 귀하의 호출은 byte 배열 (byte[])에 저장되어야하고, 암호 해독에 대한 귀하의 의견은 마찬가지로 byte 배열이됩니다. String 입력을받는 경우 .getBytes()을 사용하십시오. 출력용으로 String을 만들 때 new String(myArray)

+0

yah 알아, 내 프로그램이 작동하는 방식이다. 문자열이 암호화된다 (출력은 바이트이다). 출력은 문자열로 변환되어 별도의 텍스트 파일에 저장됩니다. 그러면 텍스트 파일에서 읽히고 다시 바이트로 변환됩니다. decryptor는 바이트를 암호 해독합니다. 그러나 부수적으로 \t \t byte [] result = cipher.doFinal (message.getBytes()); \t \t 문자열 stringResult = 새 문자열 (결과); stringResult.getBytes()'는 프로세스를 완전히 뒤집지 않습니다. – Cody