0

I'm using the following code for encrypt and decrypt the data .

Here is my ENcoder callss

public class BASE64Encoder extends CharacterEncoder {

    /** this class encodes three bytes per atom. */
    protected int bytesPerAtom() {
        return (3);
    }


    protected int bytesPerLine() {
        return (57);
    }

    /** This array maps the characters to their 6 bit values */
    private final static char pem_array[] = {
            // 0 1 2 3 4 5 6 7
            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', // 0
            'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', // 1
            'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', // 2
            'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', // 3
            'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', // 4
            'o', 'p', 'q', 'r', 's', 't', 'u', 'v', // 5
            'w', 'x', 'y', 'z', '0', '1', '2', '3', // 6
            '4', '5', '6', '7', '8', '9', '+', '/' // 7
    };



    protected void encodeAtom(OutputStream outStream, byte data[], int offset,
            int len) throws IOException {
        byte a, b, c;

        if (len == 1) {
            a = data[offset];
            b = 0;
            c = 0;
            outStream.write(pem_array[(a >>> 2) & 0x3F]);
            outStream.write(pem_array[((a << 4) & 0x30) + ((b >>> 4) & 0xf)]);
            outStream.write('=');
            outStream.write('=');
        } else if (len == 2) {
            a = data[offset];
            b = data[offset + 1];
            c = 0;
            outStream.write(pem_array[(a >>> 2) & 0x3F]);
            outStream.write(pem_array[((a << 4) & 0x30) + ((b >>> 4) & 0xf)]);
            outStream.write(pem_array[((b << 2) & 0x3c) + ((c >>> 6) & 0x3)]);
            outStream.write('=');
        } else {
            a = data[offset];
            b = data[offset + 1];
            c = data[offset + 2];
            outStream.write(pem_array[(a >>> 2) & 0x3F]);
            outStream.write(pem_array[((a << 4) & 0x30) + ((b >>> 4) & 0xf)]);
            outStream.write(pem_array[((b << 2) & 0x3c) + ((c >>> 6) & 0x3)]);
            outStream.write(pem_array[c & 0x3F]);
        }
    }
}

class is for decoder

public class DataEncryptor 
{
    static char[] carr = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

    public static synchronized String encryptPassword(String input) 
    {

        MessageDigest digest = null;

        try 
        {
            digest = MessageDigest.getInstance("MD5");
        }
        catch (Exception ex) 
        {
            ex.printStackTrace();
        }

        if (digest == null)
            return input;

        try 
        {
            digest.update(input.getBytes("UTF-8"));
        }
        catch (java.io.UnsupportedEncodingException ex) 
        {
            ex.printStackTrace();
        }

        byte[] rawData = digest.digest();
        BASE64Encoder bencoder = new BASE64Encoder();
        return bencoder.encode(rawData);
    }
}

Here is my Activity which is i want to encrypt and decrypt my data

@Override
                     protected void onPostExecute(JSONObject json)

                     {
                      super.onPostExecute(json);

                       try
                         {

                           int randomNum = generateUniqueId();
                           RequestId  =System.currentTimeMillis()+""+randomNum;

                             json.put(KEY_REQUEST_ID, RequestId);
                             json.put(KEY_REQUEST_CODE, RequestCode);
                             json.put(KEY_CHANNEL_ID, stringChannelId);
                             json.put(KEY_IP_ADDRESS, str_Device_IP_Address);
                             json.put(KEY_USERNAME, strUserName);
                             json.put(KEY_PASSWORD, strPassWord);

                                String jstr = json.toString();
                                System.out.println("jstr =" +jstr);

                                String reqvalues=AES128Bit.encrypt(json.toString(),key);
                                System.out.println("reqvalues =" +reqvalues);

                                JSONObject jSONObject = new JSONObject();
                                jSONObject.put(KEY_REQUEST, reqvalues);
                                jSONObject.put(KEY_VENDOR_ID, "1");
                                String jsonString = jSONObject.toString();
                                System.out.println("jsonString =" +jsonString);


                                JSONObject outer = new JSONObject();
                                outer.put("W2INBCWS", jsonString);
                                String outerJSONObjectResponse=outer.toString();
                                System.out.println("outerJSONObjectResponse =" +outerJSONObjectResponse);

                              //  outerJSONObjectResponse=outerJSONObjectResponse.replace("true", "\"true\"");
                               // JSONObject dataJSONObject = new JSONObject(outerJSONObjectResponse);

                               // String strGetResponseFromJson=dataJSONObject.getString("Response");
                                String strGetResponseFromJson = AES128Bit.decrypt( outerJSONObjectResponse ,key); 
                                System.out.println("strGetResponseFromJson =" +strGetResponseFromJson);



                         } 

                         catch (JSONException e)

                         {
                            e.printStackTrace();
                         } 

                         catch (Exception e) 
                         {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                       pDialog.dismiss();

                     }

                     }

When i run the Application my app is crash and getting the error and exception. Here is my Log Cat Stack Trace

   12-09 12:46:14.705: E/dalvikvm(543): Could not find class 'sun.misc.BASE64Decoder', referenced from method com.anm.cms.core.util.AES128Bit.decrypt
12-09 12:46:14.705: W/dalvikvm(543): VFY: unable to resolve new-instance 1592 (Lsun/misc/BASE64Decoder;) in Lcom/anm/cms/core/util/AES128Bit;
12-09 12:46:14.705: D/dalvikvm(543): VFY: replacing opcode 0x22 at 0x000f
12-09 12:46:14.717: D/dalvikvm(543): VFY: dead code 0x0011-0021 in Lcom/anm/cms/core/util/AES128Bit;.decrypt (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
12-09 12:46:14.717: E/dalvikvm(543): Could not find class 'sun.misc.BASE64Encoder', referenced from method com.anm.cms.core.util.AES128Bit.encrypt
12-09 12:46:14.717: W/dalvikvm(543): VFY: unable to resolve new-instance 1593 (Lsun/misc/BASE64Encoder;) in Lcom/anm/cms/core/util/AES128Bit;
12-09 12:46:14.717: D/dalvikvm(543): VFY: replacing opcode 0x22 at 0x0017
12-09 12:46:14.725: D/dalvikvm(543): VFY: dead code 0x0019-001f in Lcom/anm/cms/core/util/AES128Bit;.encrypt (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
12-09 12:46:14.725: E/dalvikvm(543): Could not find class 'sun.misc.BASE64Decoder', referenced from method com.anm.cms.core.util.AES128Bit.generateKeyFromString
12-09 12:46:14.725: W/dalvikvm(543): VFY: unable to resolve new-instance 1592 (Lsun/misc/BASE64Decoder;) in Lcom/anm/cms/core/util/AES128Bit;
12-09 12:46:14.725: D/dalvikvm(543): VFY: replacing opcode 0x22 at 0x0000
12-09 12:46:14.725: D/dalvikvm(543): VFY: dead code 0x0002-0010 in Lcom/anm/cms/core/util/AES128Bit;.generateKeyFromString (Ljava/lang/String;)Ljava/security/Key;
12-09 12:46:14.735: E/dalvikvm(543): Could not find class 'sun.misc.BASE64Encoder', referenced from method com.anm.cms.core.util.AES128Bit.generateNewKey
12-09 12:46:14.735: W/dalvikvm(543): VFY: unable to resolve new-instance 1593 (Lsun/misc/BASE64Encoder;) in Lcom/anm/cms/core/util/AES128Bit;
12-09 12:46:14.735: D/dalvikvm(543): VFY: replacing opcode 0x22 at 0x0014
12-09 12:46:14.735: D/dalvikvm(543): VFY: dead code 0x0016-001c in Lcom/anm/cms/core/util/AES128Bit;.generateNewKey ()Ljava/lang/String;
12-09 12:46:14.735: D/AndroidRuntime(543): Shutting down VM
12-09 12:46:14.735: W/dalvikvm(543): threadid=1: thread exiting with uncaught exception (group=0x40015560)
12-09 12:46:14.755: E/AndroidRuntime(543): FATAL EXCEPTION: main
12-09 12:46:14.755: E/AndroidRuntime(543): java.lang.NoClassDefFoundError: sun.misc.BASE64Decoder
12-09 12:46:14.755: E/AndroidRuntime(543):  at com.anm.cms.core.util.AES128Bit.generateKeyFromString(AES128Bit.java:58)
12-09 12:46:14.755: E/AndroidRuntime(543):  at com.anm.cms.core.util.AES128Bit.encrypt(AES128Bit.java:21)
12-09 12:46:14.755: E/AndroidRuntime(543):  at com.window2india.Login$GetJSONParse.onPostExecute(Login.java:208)
12-09 12:46:14.755: E/AndroidRuntime(543):  at com.window2india.Login$GetJSONParse.onPostExecute(Login.java:1)
12-09 12:46:14.755: E/AndroidRuntime(543):  at android.os.AsyncTask.finish(AsyncTask.java:417)
12-09 12:46:14.755: E/AndroidRuntime(543):  at android.os.AsyncTask.access$300(AsyncTask.java:127)
12-09 12:46:14.755: E/AndroidRuntime(543):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
12-09 12:46:14.755: E/AndroidRuntime(543):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-09 12:46:14.755: E/AndroidRuntime(543):  at android.os.Looper.loop(Looper.java:130)
12-09 12:46:14.755: E/AndroidRuntime(543):  at android.app.ActivityThread.main(ActivityThread.java:3683)
12-09 12:46:14.755: E/AndroidRuntime(543):  at java.lang.reflect.Method.invokeNative(Native Method)
12-09 12:46:14.755: E/AndroidRuntime(543):  at java.lang.reflect.Method.invoke(Method.java:507)
12-09 12:46:14.755: E/AndroidRuntime(543):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-09 12:46:14.755: E/AndroidRuntime(543):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-09 12:46:14.755: E/AndroidRuntime(543):  at dalvik.system.NativeStart.main(Native Method)
tazeenmulani
  • 600
  • 5
  • 18
  • 43

1 Answers1

0

com.anm.cms.core.util.AES128Bit is not present in classpath and I see in your code you are using it.

String reqvalues=AES128Bit.encrypt(json.toString(),key);
String strGetResponseFromJson = AES128Bit.decrypt( outerJSONObjectResponse ,key);

When we get such issue in plain java class then below is suggestion to follow

Find out its .jar file and put it in your classpath. lets assume your jar file name is ABC.jar and java file you want to run in Main.java then run program using below command

java -cp C:\ABC.jar Main

EDIT: I found android specific question , it must help you

Community
  • 1
  • 1
Vipin
  • 4,851
  • 3
  • 35
  • 65
  • i have already add com.anm.cms.core.util.AES128Bit in Reference Libraries. – tazeenmulani Dec 09 '13 at 06:25
  • I already put the jar file in ref lib in Android.But Still not working and exception occur like = 12-09 12:46:14.755: E/AndroidRuntime(543): java.lang.NoClassDefFoundError: sun.misc.BASE64Decoderatcom.anm.cms.core.util.AES128Bit.generateKeyFromString(AES128Bit.java:58).Please help me.I'm fade up this problem since last 3 days. – tazeenmulani Dec 09 '13 at 07:32
  • Seems u have updated exception now it shows NoClassDefFoundError in sun.misc.BASE64Decoder :( , hope u are not using JDK source code in your workspace and jdk library you are using. as this class is part of rt.jar. – Vipin Dec 09 '13 at 10:58
  • I would suggest one more thing create new workspace , copy your source code in that. Its just a troubleshooting technique I have suggested. – Vipin Dec 09 '13 at 11:01