IllegalBlockSizeException while using DES encryption
Hi,
Can anyone help me to resolve IllegalBlockSizeException
Below here is the code i am using
***************************************************************
import com.opensymphony.webwork.ServletActionContext;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.servlet.http.HttpSession;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.StringTokenizer;
public class SecurityHelper {
private static byte[] iv = {0x0a, 0x01, 0x02, 0x03, 0x04, 0x0b, 0x0c, 0x0d};
private static SecretKey secretKey;
private static final String usedAlgo = "DES/CBC/PKCS5Padding";
private static BASE64Encoder base64Encoder = new BASE64Encoder();
private static BASE64Decoder base64Decoder = new BASE64Decoder();
public static String encrypt(String encBytes) {
try {
HttpSession session = ServletActionContext.getRequest().getSession(false);
SecretKey secretKey = (SecretKey) session.getAttribute("SeceretReference");
Cipher cipher = Cipher.getInstance(usedAlgo);
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec);
byte[] encryptedBytes = cipher.doFinal(encBytes.getBytes());
return URLEncoder.encode(base64Encoder.encode(encryptedBytes).replace('+','$') + "@", "UTF-8");
} catch (Exception e) {
e.printStackTrace(); //ToDO : Anurag
return null;
}
}
public static String decrypt(String decString) {
if(null != decString){
try {
StringTokenizer stringTokenizer = new StringTokenizer(decString,",");
while(stringTokenizer.hasMoreTokens()) {
decString = stringTokenizer.nextToken().trim();
}
String characterEncoding = "ASCII";
HttpSession session = ServletActionContext.getRequest().getSession(false);
SecretKey secretKey = (SecretKey) session.getAttribute("SeceretReference");
Cipher cipher = Cipher.getInstance(usedAlgo);
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
cipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec);
if (decString.indexOf("%") != -1) {
decString = URLDecoder.decode(decString, "UTF-8");
}
decString = decString.replace('$','+');
decString = decString.substring(0, decString.length() - 1);
byte[] decryptedBytes = base64Decoder.decodeBuffer(decString);
byte[] resultBytes = cipher.doFinal(decryptedBytes);
return new String(resultBytes, characterEncoding);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
return null;
}
}
****************************************************************
the exception is
16/05/07 12:38:03:011 BST] 0000003c SystemErrR javax.crypto.IllegalBlockSizeException: Input length (with padding) not multiple of 8 bytes
[16/05/07 12:38:03:027 BST] 0000003c SystemErrR at com.ibm.crypto.provider.DESCipher.a(Unknown Source)
[16/05/07 12:38:03:027 BST] 0000003c SystemErrR at com.ibm.crypto.provider.DESCipher.engineDoFinal(Unknown Source)
[16/05/07 12:38:03:027 BST] 0000003c SystemErrR at com.ibm.crypto.provider.DESCipher.engineDoFinal(Unknown Source)
[16/05/07 12:38:03:027 BST] 0000003c SystemErrR at javax.crypto.Cipher.doFinal(Unknown Source)

