นี่คือวิธีการเข้ารหัสของฉัน (ค่าคือพารามิเตอร์อินพุต):
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");
นี่คือวิธีการถอดรหัสของฉัน (ค่าคือพารามิเตอร์อินพุต):
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");
และฉันได้รับข้อยกเว้น:
javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
ฉันได้อ่านหัวข้อต่างๆ ดังนั้นฉันจึงพบว่าข้อยกเว้นนี้เกิดขึ้นเมื่อไม่มีช่องว่างภายในและมีโหมดการเข้ารหัสอื่น แล้วมีอะไรผิดปกติ?
URLDecoder
ของคุณอยู่ที่ไหน? และส่วนใหญ่จะเกิดขึ้นหากไซเฟอร์เท็กซ์ของคุณไม่ได้มีขนาดบล็อกเป็นทวีคูณ (8 สำหรับ DES) อีกต่อไป - person Maarten Bodewes   schedule 17.07.2014