Inilah metode enkripsi saya (nilai adalah parameter input):
byte key_bytes[] = "12345678".getBytes();
SecretKeySpec _keyspec = new SecretKeySpec(key_bytes, "DES");
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); // Yes, I know I shouldn't use DES
cipher.init(Cipher.ENCRYPT_MODE, _keyspec);
byte[] utf8 = value.getBytes("UTF8");
byte[] enc = cipher.doFinal(utf8); // Encrypt
String encrypted = new String(new Base64().encode(enc));
return URLEncoder.encode(encrypted, "UTF-8");
Inilah metode dekripsi saya (nilai adalah parameter input):
byte key_bytes[] = "12345678".getBytes();
SecretKeySpec _keyspec = new SecretKeySpec(key_bytes, "DES");
Cipher dcipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
dcipher.init(Cipher.DECRYPT_MODE, _keyspec);
byte[] dec = new Base64().decode(value);
byte[] utf8 = dcipher.doFinal(dec); // Decrypt, throws exception
return new String(utf8, "UTF8");
Dan saya mendapat Pengecualian:
javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
Saya telah membaca topik yang berbeda, jadi saya menemukan, bahwa pengecualian ini terjadi, ketika tidak ada padding dan ada mode sandi lain. Jadi, apa yang salah?
URLDecoder
mu? Dan ini terutama terjadi jika ciphertext Anda bukan lagi kelipatan ukuran blok (8 untuk DES). - person Maarten Bodewes   schedule 17.07.2014