Witam,
Poniżej całość kodu:
public class TrippleDes {
private static final String KEY_FACTORY = "DESede";
private static final String UNICODE_FORMAT = "UTF8";
public static final String DESEDE_ENCRYPTION_SCHEME = "DESede/CBC/PKCS5Padding";
private KeySpec ks;
private SecretKeyFactory skf;
private Cipher cipher;
byte[] arrayBytes;
final IvParameterSpec iv;
SecretKey key;
public TrippleDes(String myEncryptionKey, String ivString) throws Exception {
arrayBytes = DatatypeConverter.parseHexBinary(myEncryptionKey);
iv = new IvParameterSpec(DatatypeConverter.parseHexBinary(ivString));
ks = new DESedeKeySpec(arrayBytes);
skf = SecretKeyFactory.getInstance(KEY_FACTORY);
cipher = Cipher.getInstance(DESEDE_ENCRYPTION_SCHEME);
key = skf.generateSecret(ks);
}
public String decrypt(String encryptedStringBase64 []) throws Exception {
String encryptedInput = null;
for (int i = 0; i < encryptedStringBase64.length; i++) {
encryptedInput += encryptedStringBase64[i];
}
byte[] encryptedString = Base64.decodeBase64(encryptedInput.getBytes(UNICODE_FORMAT));
try {
cipher.init(Cipher.DECRYPT_MODE, key, iv);
byte[] plainText = cipher.doFinal(encryptedString);
return new String(plainText);
} catch (Exception e) {
throw new Exception(e);
}
}
public static void main(String args []) throws Exception
{
TrippleDes td = new TrippleDes("32237628374CDHSFDFSHDHFNNDSICFHDSNGFCYC74N7Y3GF7", "0123456789abcdef");
String decryptedString = td.decrypt(args);
System.out.println(decryptedString);
}
}
Niestety otrzymuję wyjątek:
Exception in thread "main" java.lang.Exception: javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
at com.ca.acl.TrippleDes.decrypt(TrippleDes.java:59)
at com.ca.acl.TrippleDes.main(TrippleDes.java:67)
Caused by: javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:750)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:676)
at com.sun.crypto.provider.DESedeCipher.engineDoFinal(DESedeCipher.java:294)
at javax.crypto.Cipher.doFinal(Cipher.java:2087)
at com.ca.acl.TrippleDes.decrypt(TrippleDes.java:56)
... 1 more
Z czego wynika problem?