Java NoClassDefFoundError:Decoder.base64 Android中的Decoder

Java NoClassDefFoundError:Decoder.base64 Android中的Decoder,java,android,encryption,Java,Android,Encryption,我想在我的Android应用程序中解密加密的服务器响应。我在过去20天收到NoClassDefFoundError的异常。我不知道该怎么做,我按照build path、android tools->Add support library的所有步骤操作,还右键点击libs folder->import->Archive等,编译和测试完这个程序后,我直接得到以下错误: 01-21 14:49:28.280: E/dalvikvm(451): Could not find class 'Decoder

我想在我的Android应用程序中解密加密的服务器响应。我在过去20天收到NoClassDefFoundError的异常。我不知道该怎么做,我按照build path、android tools->Add support library的所有步骤操作,还右键点击libs folder->import->Archive等,编译和测试完这个程序后,我直接得到以下错误:

01-21 14:49:28.280: E/dalvikvm(451): Could not find class 'Decoder.BASE64Decoder', referenced from method com.json_to_server.W2i_EncryptDecrypt.decrypt
01-21 14:49:28.280: W/dalvikvm(451): VFY: unable to resolve new-instance 6 (LDecoder/BASE64Decoder;) in Lcom/json_to_server/W2i_EncryptDecrypt;
01-21 14:49:28.280: D/dalvikvm(451): VFY: replacing opcode 0x22 at 0x000f
01-21 14:49:28.280: D/dalvikvm(451): VFY: dead code 0x0011-0021 in Lcom/json_to_server/W2i_EncryptDecrypt;.decrypt (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
01-21 14:49:28.289: E/dalvikvm(451): Could not find class 'Decoder.BASE64Encoder', referenced from method com.json_to_server.W2i_EncryptDecrypt.encrypt
01-21 14:49:28.289: W/dalvikvm(451): VFY: unable to resolve new-instance 7 (LDecoder/BASE64Encoder;) in Lcom/json_to_server/W2i_EncryptDecrypt;
01-21 14:49:28.289: D/dalvikvm(451): VFY: replacing opcode 0x22 at 0x0017
01-21 14:49:28.289: D/dalvikvm(451): VFY: dead code 0x0019-001f in Lcom/json_to_server/W2i_EncryptDecrypt;.encrypt (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
01-21 14:49:28.289: E/dalvikvm(451): Could not find class 'Decoder.BASE64Decoder', referenced from method com.json_to_server.W2i_EncryptDecrypt.generateKeyFromString
01-21 14:49:28.289: W/dalvikvm(451): VFY: unable to resolve new-instance 6 (LDecoder/BASE64Decoder;) in Lcom/json_to_server/W2i_EncryptDecrypt;
01-21 14:49:28.289: D/dalvikvm(451): VFY: replacing opcode 0x22 at 0x0000
01-21 14:49:28.289: D/dalvikvm(451): VFY: dead code 0x0002-0010 in Lcom/json_to_server/W2i_EncryptDecrypt;.generateKeyFromString (Ljava/lang/String;)Ljava/security/Key;
01-21 14:49:28.299: W/dalvikvm(451): threadid=9: thread exiting with uncaught exception (group=0x40015560)
01-21 14:49:28.299: E/AndroidRuntime(451): FATAL EXCEPTION: AsyncTask #1
01-21 14:49:28.299: E/AndroidRuntime(451): java.lang.RuntimeException: An error occured while executing doInBackground()
01-21 14:49:28.299: E/AndroidRuntime(451):  at android.os.AsyncTask$3.done(AsyncTask.java:200)
01-21 14:49:28.299: E/AndroidRuntime(451):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
01-21 14:49:28.299: E/AndroidRuntime(451):  at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
01-21 14:49:28.299: E/AndroidRuntime(451):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
01-21 14:49:28.299: E/AndroidRuntime(451):  at java.util.concurrent.FutureTask.run(FutureTask.java:138)
01-21 14:49:28.299: E/AndroidRuntime(451):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
01-21 14:49:28.299: E/AndroidRuntime(451):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
01-21 14:49:28.299: E/AndroidRuntime(451):  at java.lang.Thread.run(Thread.java:1019)
01-21 14:49:28.299: E/AndroidRuntime(451): Caused by: java.lang.NoClassDefFoundError: Decoder.BASE64Decoder
01-21 14:49:28.299: E/AndroidRuntime(451):  at com.json_to_server.W2i_EncryptDecrypt.generateKeyFromString(W2i_EncryptDecrypt.java:81)
01-21 14:49:28.299: E/AndroidRuntime(451):  at com.json_to_server.W2i_EncryptDecrypt.decrypt(W2i_EncryptDecrypt.java:53)
01-21 14:49:28.299: E/AndroidRuntime(451):  at com.json_to_server.EncryptDecrypt_Demo.POST(EncryptDecrypt_Demo.java:215)
01-21 14:49:28.299: E/AndroidRuntime(451):  at com.json_to_server.EncryptDecrypt_Demo$HttpAsyncTask.doInBackground(EncryptDecrypt_Demo.java:410)
01-21 14:49:28.299: E/AndroidRuntime(451):  at com.json_to_server.EncryptDecrypt_Demo$HttpAsyncTask.doInBackground(EncryptDecrypt_Demo.java:1)
01-21 14:49:28.299: E/AndroidRuntime(451):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
01-21 14:49:28.299: E/AndroidRuntime(451):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
01-21 14:49:28.299: E/AndroidRuntime(451):  ... 4 more
这是活动代码

 static String key="Dyv6ACIDe2q+OEjztjfNDw==";


    static String RequestId=null;
    static String RequestCode="001";
    static String stringChannelId="MobileWeb";
    static String strIpAddress = "35435646";
    static String strStatusFlag="true";
    static String strUserName="vikas.k1086@gmail.com";
    static String strPwd="password1";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mcrypt = new EncodeDecodeAES();

        try 
        {
              System.out.println("Encrypted Password = ");
              computeMD5Hash(strPwd);

              System.out.println("*****************************************************************");

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

        tvIsConnected = (TextView) findViewById(R.id.tvIsConnected);

        btnPost = (Button) findViewById(R.id.btnPost);
          btnPost.setOnClickListener(this);



          public static String POST(String url)
          {

            String result = "";
            try
             {

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


                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);

                String json = "";
                JSONObject jsonObject = new JSONObject();

                jsonObject.put(KEY_REQUEST_ID,RequestId);
                jsonObject.put(KEY_CHANNEL_ID, stringChannelId);
                jsonObject.put(KEY_REQUEST_CODE,RequestCode);
                jsonObject.put(KEY_IP_ADDRESS,strIpAddress);
                jsonObject.put(KEY_USERNAME, strUserName);
                jsonObject.put(KEY_PASSWORD, strPassword);
                jsonObject.put(KEY_STATUS_FLAG, strStatusFlag);

                json = jsonObject.toString();
                System.out.println("json = " + json );
                String encrypted = SimpleCrypto.encrypt(json, key);
                System.out.println("Encrypted String = " + encrypted);
                System.out.println("*****************************************************************");


                JSONObject inner = new JSONObject();
                inner.put(KEY_VENDOR_ID, "1");
                inner.put(KEY_REQUEST, encrypted);

                JSONObject outer = new JSONObject();
                outer.put("W2INBCWS", inner);

                JSONObject json2 = new JSONObject();
                json2.put("W2INBCWS", outer);

                JSONObject json3 = new JSONObject();
                json3.put("W2IWSImplPort", json2);


                    JSONObject json4 = new JSONObject();
                    json4.put("W2IWSImplService", json3);
                    System.out.println("strjson  = " + json4.toString());


                    String strjson = "";
                    strjson=outer.toString();
                    System.out.println("strjson  = " + strjson);
                    System.out.println("*****************************************************************");

            StringEntity se = new StringEntity(strjson);
            httpPost.setEntity(se);
            httpPost.setHeader("Accept", "application/json");
            httpPost.setHeader("Content-type", "application/json");
            HttpResponse httpResponse = httpclient.execute(httpPost);

            BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8"),8);
            StringBuilder sb = new StringBuilder();
            String line = null;

            while ((line = reader.readLine()) != null)
            {
                sb.append(line + "\n");
            }
            result = sb.toString();

            String jsonString = result;
            jsonString=jsonString.replace("true", "\"true\"");
            System.out.println("jsonString Values = " + result);
            System.out.println("*****************************************************************");


            JSONObject finalResult = new JSONObject(jsonString);
            String strResponse=finalResult.getString("Response").replace("\n'","").replace("\'", "").replace("+", "").replace("//", "");

            System.out.println("strResponse = "+ strResponse);
            Base64_Act.decode(strResponse);


            System.out.println("strResponse = "+ Base64_Act.decode(strResponse));


     } 

        catch (Exception e) 
        {
            e.printStackTrace();

        }

        return result;
    }


    public boolean isConnected(){
        ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Activity.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isConnected()) 
                return true;
            else
                return false;    
    }


    @Override
    public void onClick(View view) {

        switch(view.getId())
        {
            case R.id.btnPost:

                new HttpAsyncTask().execute("http://www.window2india.com/cms/json/w2iWS");

                Toast.makeText(getBaseContext(), "Data Sent SUccesfully !!!!", Toast.LENGTH_LONG).show();
            break;
        }

    }


    private class HttpAsyncTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {



            return POST(urls[0]);
        }


        protected void onPostExecute(String result) 
        {
            Toast.makeText(getBaseContext(), "Data Sent!", Toast.LENGTH_LONG).show();
       }
    }




    private static String convertInputStreamToString(InputStream inputStream) throws IOException{
        BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
        String line = "";
        String result = "";
        while((line = bufferedReader.readLine()) != null)
            result += line;

        inputStream.close();
        return result;

    }  

    public static int generateUniqueId()
    {

        Random randomGenerator = new Random();
        int randomInt = randomGenerator.nextInt(50);
        randomInt +=10;
        return randomInt;
    }





    private static String convertToHex(byte[] data) throws java.io.IOException 
     {
           StringBuffer sb = new StringBuffer();
            String hex=null;

            hex=Base64.encodeToString(data, 0, data.length, NO_OPTIONS);

            sb.append(hex);

            return sb.toString();
        }


public void computeMD5Hash(String password)
    {

        try {
            // Create MD5 Hash
            MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
            digest.update(password.getBytes());
            byte messageDigest[] = digest.digest();

            StringBuffer MD5Hash = new StringBuffer();
            for (int i = 0; i < messageDigest.length; i++)
            {
                String h = Integer.toHexString(0xFF & messageDigest[i]);
                while (h.length() < 2)
                    h = "0" + h;
                MD5Hash.append(h);
            }

            System.out.println("MD5 hash generated is: " + " " + MD5Hash);
            strPassword = MD5Hash.toString();
            System.out.println(strPassword);

        } 
            catch (NoSuchAlgorithmException e) 
            {
            e.printStackTrace();
            }

    }
static String key=“Dyv6ACIDe2q+OEjztjfNDw==”;
静态字符串RequestId=null;
静态字符串RequestCode=“001”;
静态字符串stringChannelId=“MobileWeb”;
静态字符串strIpAddress=“35435646”;
静态字符串strStatusFlag=“true”;
静态字符串strUserName=“vikas。k1086@gmail.com";
静态字符串strPwd=“password1”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mcrypt=new EncodeDecodeAES();
尝试
{
System.out.println(“加密密码=”);
computeMD5Hash(strPwd);
System.out.println(“****************************************************************************************************************”);
}
捕获(例外e)
{
//TODO自动生成的捕捉块
e、 printStackTrace();
}
tvIsConnected=(TextView)findViewById(R.id.tvIsConnected);
btnPost=(按钮)findViewById(R.id.btnPost);
btnPost.setOnClickListener(此);
公共静态字符串POST(字符串url)
{
字符串结果=”;
尝试
{
int randomNum=generateUniqueId();
RequestId=System.currentTimeMillis()+“”+randomNum;
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(url);
字符串json=“”;
JSONObject JSONObject=新的JSONObject();
jsonObject.put(KEY\u REQUEST\u ID,RequestId);
jsonObject.put(KEY\u CHANNEL\u ID,stringChannelId);
jsonObject.put(键请求代码,请求代码);
jsonObject.put(密钥IP地址、条带地址);
jsonObject.put(KEY_用户名,strUserName);
jsonObject.put(关键字密码,strPassword);
jsonObject.put(键状态标志,strStatusFlag);
json=jsonObject.toString();
System.out.println(“json=“+json”);
String encrypted=SimpleCrypto.encrypt(json,密钥);
System.out.println(“加密字符串=”+加密);
System.out.println(“****************************************************************************************************************”);
JSONObject inner=新的JSONObject();
内部。put(关键供应商ID,“1”);
内部.put(密钥请求,加密);
JSONObject outer=新的JSONObject();
外部放置(“W2INBCWS”,内部);
JSONObject json2=新的JSONObject();
json2.put(“W2INBCWS”,外部);
JSONObject json3=新的JSONObject();
json3.put(“w2iwsimport”,json2);
JSONObject json4=新的JSONObject();
json4.put(“W2IWSImplService”,json3);
System.out.println(“strjson=“+json4.toString());
字符串strjson=“”;
strjson=outer.toString();
System.out.println(“strjson=“+strjson”);
System.out.println(“****************************************************************************************************************”);
StringEntity se=新的StringEntity(strjson);
httpPost.setEntity(se);
setHeader(“接受”、“应用程序/json”);
setHeader(“内容类型”、“应用程序/json”);
HttpResponse HttpResponse=httpclient.execute(httpPost);
BufferedReader=新的BufferedReader(新的InputStreamReader(httpResponse.getEntity().getContent(),“UTF-8”),8);
StringBuilder sb=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null)
{
sb.追加(第+行“\n”);
}
结果=sb.toString();
字符串jsonString=result;
jsonString=jsonString.replace(“true”,“true”);
System.out.println(“jsonString value=“+result”);
System.out.println(“****************************************************************************************************************”);
JSONObject finalResult=新的JSONObject(jsonString);
字符串strResponse=finalResult.getString(“响应”)。替换(“\n”“”)。替换(“\”,”)。替换(“+”,”)。替换(“/”,”);
System.out.println(“strResponse=“+strResponse”);
Base64_动作解码(strResponse);
System.out.println(“strResponse=“+Base64_Act.decode(strResponse));
} 
捕获(例外e)
{
e、 printStackTrace();
}
返回结果;
}
公共布尔值未连接(){
ConnectivityManager connMgr=(ConnectivityManager)getSystemService(Activity.CONNECTIVITY_服务);
NetworkInfo NetworkInfo=connMgr.getActiveNetworkInfo();
if(networkInfo!=null&&networkInfo.isConnected())
返回true;
其他的
返回false;
}
@凌驾
公共void onClick(视图){
开关(view.getId())
{
案例R.id.btnPost:
新建HttpAsyncTask()。执行(“http://www.window2india.com/cms/json/w2iWS");
Toast.makeText(getBaseContext(),“数据成功发送!!!!”,Toast.LENGTH\u LONG.show();
打破
}
}
私有类HttpAsyncTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…URL){
返回
public class SimpleCrypto 

{

    public static String decrypt1(String seed, String encrypted) throws Exception 
    {
        byte[] keyb = seed.getBytes("UTF-8");
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] thedigest = md.digest(keyb);
        SecretKeySpec skey = new SecretKeySpec(thedigest, "AES/CBC/ZeroBytePadding");
        //SecretKeySpec skey = new SecretKeySpec(thedigest, "AES/ECB/PKCS7Padding");
        Cipher dcipher = Cipher.getInstance("AES/ECB/PKCS7Padding");
        dcipher.init(Cipher.DECRYPT_MODE, skey);
        byte[] clearbyte = dcipher.doFinal(toByte(encrypted));
        return new String(clearbyte);
    }

    public static byte[] toByte1(String hexString) 
    {
        int len = hexString.length()/2;
        byte[] result = new byte[len];
        for (int i = 0; i < len; i++)
            result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue();
        return result;
    }

        public static String encrypt(String seed, String cleartext) throws Exception {
                byte[] rawKey = getRawKey(seed.getBytes());
                byte[] result = encrypt(rawKey, cleartext.getBytes());
                return toHex(result);
        }

        public static String decrypt(String seed, String hexStr) throws Exception {
                byte[] rawKey = getRawKey(seed.getBytes());
                byte[] enc = toByte(hexStr);
                byte[] result = decrypt(rawKey, enc);
                return new String(result);
        }

        private static byte[] getRawKey(byte[] seed) throws Exception {
                KeyGenerator kgen = KeyGenerator.getInstance("AES");
                SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
                sr.setSeed(seed);
            kgen.init(128, sr); // 192 and 256 bits may not be available
            SecretKey skey = kgen.generateKey();
            byte[] raw = skey.getEncoded();
            return raw;
        }


        private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
                Cipher cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
            byte[] encrypted = cipher.doFinal(clear);
                return encrypted;
        }

        private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
               // Cipher cipher = Cipher.getInstance("AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
            byte[] decrypted = cipher.doFinal(encrypted);
                return decrypted;
        }

        //SecretKeySpec(thedigest, "AES/CBC/ZeroBytePadding");

        public static String toHex(String txt) {
                return toHex(txt.getBytes());
        }
        public static String fromHex(String hex) {
                return new String(toByte(hex));
        }

        public static byte[] toByte(String hexStr) {
                int len = hexStr.length()/2;
                byte[] result = new byte[len];
                for (int i = 0; i < len; i++)
                        result[i] = Integer.valueOf(hexStr.substring(2*i, 2*i+2), 16).byteValue(); //2 * i, 2 * i + 2
                return result;
        }

        public static String toHex(byte[] buf) {
                if (buf == null)
                        return "";
                StringBuffer result = new StringBuffer(2*buf.length);
                for (int i = 0; i < buf.length; i++) {
                        appendHex(result, buf[i]);
                }
                return result.toString();
        }
        private final static char[] HEX = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
        private static void appendHex(StringBuffer sb, byte b) {
                sb.append(HEX.length).append(HEX.length);
        }

}