Skip to Main Content

Java Security

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

decryption and padding in java cryptography

934529May 2 2012 — edited May 3 2012
i have to decrypt a frame on my server. encrypted frame is coming from client device through GPRS on socket.encryption is done with "TripleDes" and with a given key.same algorithm and key i am using n server side. frame is a combination of Hex and Ascii String. problem is when i decrypt this frame i get an error :

javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher

and when i pad my byte array with zeros like

temparray[87] = 00;


i get an error :

javax.crypto.BadPaddingException: Given final block not properly padded

following is my code :
    if ((len = inputStream.read(mainBuffer)) > -1) {
                    totalLength = len;
                }
    if (totalLength > 0) {
                    byteToAscii = function.byteToAscii(mainBuffer, totalLength);
                }
    if (byteToAscii.length() > 0) {
                    completeHexString = function.stringToHex(byteToAscii);               
                    debugInfo = "FRAME RECV.=" + completeHexString;
    /* FRAME RECV.=41ed34a41a9de6d270aa1e1464527e88c8bee66a00cfb308f60c105de81db0f1ce43d8c0b9bc4e8070b5ab8d4d3650b55d23223fc687bb1485945bc3228e9707a7aecda9f90657e0ac009571c6469c58a2cd9793cc433ccb5993f2*/
                }
    byte[] key = new byte[]{31, 30, 31, 36, 32, 11, 11, 11, 22, 26, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30};
    myKeySpec = new DESedeKeySpec(key);
    mySecretKeyFactory = SecretKeyFactory.getInstance("TripleDES");
    dekey = mySecretKeyFactory.generateSecret(myKeySpec);
    byte[] zeros = {0, 0, 0, 0, 0, 0, 0, 0};
    IvParameterSpec iv = new IvParameterSpec(zeros);
    Cipher c = Cipher.getInstance("TripleDES/CBC/PKCS5Padding");
    c.init(Cipher.DECRYPT_MODE, dekey, iv);
    byte[] decordedValue = new BASE64Decoder().decodeBuffer(completeHexString);
    byte[] decValue = c.doFinal(decordedValue);
    String decryptedValue = new String(decValue);
    System.out.println("decryptedValue= " + decryptedValue);
here are the functions which i am using inside the code:
    public String stringToHex(String base) {
            StringBuffer buffer = new StringBuffer();
            int intValue = 0;
            for (int x = 0; x < base.length(); x++) {
                intValue = base.charAt(x);
                String hex = Integer.toHexString(intValue);
                if (hex.length() == 1) {
                    buffer.append("0" + hex + "");
                } else {
                    buffer.append(hex + "");
                }
            }
            return buffer.toString();
        }
    public String byteToAscii(byte[] b, int length) {
            String returnString = "";
            for (int i = 0; i < length; i++) {
                returnString += (char) (b[i] & 0xff);
            }
            return returnString;
        }
i am new in java cryptography. pl tell me how to do it?
thanks in advance.
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on May 31 2012
Added on May 2 2012
11 comments
2,677 views