繁体   English   中英

Android API级别10(2.3.3)中的NoClassDefFoundError AES128位

[英]NoClassDefFoundError AES128 Bit in Android API level 10 (2.3.3)

我正在使用以下代码对数据进行加密和解密。

这是我的ENcoder通话

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]);
        }
    }
}

类用于解码器

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);
    }
}

这是我的活动,我想对我的数据进行加密和解密

@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();

                     }

                     }

当我运行应用程序时,我的应用程序崩溃了,并得到了错误和异常。 这是我的日志猫堆栈跟踪

   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)

com.anm.cms.core.util.AES128Bit在类路径中不存在,我在您的代码中看到您正在使用它。

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

当我们在普通的Java类中遇到此类问题时,以下是建议遵循

找出其.jar文件并将其放在您的类路径中。 假设您的jar文件名为ABC.jar和要在Main.java中运行的java文件,然后使用以下命令运行程序

java -cp C:\\ ABC.jar主要

编辑:我发现了android特定的问题 ,它必须帮助您

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM