2011-10-16 52 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」和IM試圖解密該消息是「讀」。我得到這個錯誤:

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

但加密(它的工作方式相同)表示加密值

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

我怎樣才能解決這個或避免輸入這些字符串的用戶? Thansk

+1

*「請忽略雜亂」*沒問題,我會忽略您的帖子。 –

+1

這必須作爲'一週的虛擬唾液'下降。我推薦閱讀[如何問問題的智能方式](http://catb.org/~esr/faqs/smart-questions.html),特別提及[On On Reacting Like A Loser](http:// catb.org/~esr/faqs/smart-questions.html#not_losing)。祝你好運! –

+1

「...並且要加密的消息是'read'」:你不是想解密嗎?您需要將具有相同填充的加密操作的輸出傳遞給上述函數。 – vhallac

回答

0

解決方案:請勿將其存儲在字符串中。

您對Cipher.doFinal呼叫應存放在一個byte陣列(byte[]),以及您輸入到解密同樣應該是一個byte陣列。如果您輸入String輸入,請使用.getBytes();當您爲輸出創建String時,請使用new String(myArray)

+0

嗯,我知道,這是我的程序如何工作: 字符串得到加密(輸出是字節)。 輸出轉換爲字符串並存儲在一個單獨的文本文件中。 然後從文本文件中讀取並轉換回字節。 解密器解密字節。 但是很明顯 \t \t'byte [] result = cipher.doFinal(message.getBytes()); \t \t String stringResult = new String(result); stringResult.getBytes()'不會完全顛倒整個過程 – Cody