-1
對於Crypto類,我們已經使用ECB提供DESede密文,沒有填充=>「6t8Z5bKl5ybJL + MiFerNBmiTDS7wlTEUdWNwJJApWmQ ==」,它是以base64形式。 我們得到了有關密鑰的線索,因此我構建了所有可能的密鑰(所有密鑰都是ASCII格式)。用NoPadding解密DESede密碼
String strToDecrypt="6t8Z5bKl5ybJL+MiFerNBmiTDS7wlTEUdWNwJJApWmQ==";
byte[] input = strToDecrypt.getBytes();
//Decrypt
Cipher b = Cipher.getInstance("DESede/ECB/NoPadding");
b.init(Cipher.DECRYPT_MODE, keySpec);
byte output[] = b.doFinal(input);
String out = new String(output);
System.out.println(new String(out));
當我用我的鑰匙運行這段代碼,我得到一個IllegalBlockSizeException因爲我的投入是不是8個字節的整數倍。 我很困惑要使用哪個「基地」。正如我上面所說的那樣,密文是在base64中,所以當運行Cipher.DECRYPT時,我應該給某個「基礎」中的鍵或者我想在某個基礎上解密的字符串。
'的getBytes()'不知道你的字符串應該是Base64編碼。你需要[將字符串解碼爲Base64](https://stackoverflow.com/questions/469695/decode-base64-data-in-java),而不是隻調用'getBytes()'。 – Blorgbeard
更明確地說,'byte [] input = Base64.getDecoder()。decode(strToDecrypt);' – erickson
@erickson謝謝你。這給了我一個錯誤,但使用getMimeDecoder()。decode(strToDecrypt)代替。我所有的輸出都像「9 f8 uK = # g9S33」。沒有明文在任何位置。我所有的鑰匙都是ASCII形式,「Êþº¾ÿÿÿÿÊþº¾ÿÿÿÿÊþº¾ÿÿÿÿ」。任何建議我做錯了什麼? –