Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android中的encodeaes加密和解密问题_Java_Android_Json - Fatal编程技术网

Java Android中的encodeaes加密和解密问题

Java Android中的encodeaes加密和解密问题,java,android,json,Java,Android,Json,我已经编写了加密和解密数据的代码。当我运行Android demo时,没有发出加密命令,但我的数据被解密,出现如下异常: java.lang.NumberFormatException:无法将“+”解析为整数 这是我的课 public class EncodeDecodeAES { private final static String HEX = "0123456789ABCDEF"; private final static int JELLY_BEAN_4_2 = 17;

我已经编写了加密和解密数据的代码。当我运行Android demo时,没有发出加密命令,但我的数据被解密,出现如下异常:

java.lang.NumberFormatException:无法将“+”解析为整数

这是我的课

public class EncodeDecodeAES {
    private final static String HEX = "0123456789ABCDEF";

    private final static int JELLY_BEAN_4_2 = 17;

    private final static byte[] key = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
            0, 0, 0 };



    public static String encrypt(String seed, String cleartext)
            throws Exception {

        byte[] rawKey = getRawKey(seed.getBytes());

        byte[] result = encrypt(rawKey, cleartext.getBytes());

        String fromHex = toHex(result);

        String base64 = new String(Base64.encodeToString(fromHex.getBytes(), 0));

        return base64;

    }

    public static String decrypt(String seed, String encrypted)
            throws Exception {

        byte[] seedByte = seed.getBytes();

        System.arraycopy(seedByte, 0, key, 0,
                ((seedByte.length < 16) ? seedByte.length : 16));

        String base64 = new String(Base64.decode(encrypted, 0));

        byte[] rawKey = getRawKey(seedByte);

        byte[] enc = toByte(base64);

        byte[] result = decrypt(rawKey, enc);

        return new String(result);

    }

    public static byte[] encryptBytes(String seed, byte[] cleartext)
            throws Exception {

        byte[] rawKey = getRawKey(seed.getBytes());

        byte[] result = encrypt(rawKey, cleartext);

        return result;

    }

    public static byte[] decryptBytes(String seed, byte[] encrypted)
            throws Exception {

        byte[] rawKey = getRawKey(seed.getBytes());

        byte[] result = decrypt(rawKey, encrypted);

        return result;

    }

    private static byte[] getRawKey(byte[] seed) throws Exception {

        KeyGenerator kgen = KeyGenerator.getInstance("AES"); // , "SC");

        SecureRandom sr = null;

        if (android.os.Build.VERSION.SDK_INT >= JELLY_BEAN_4_2) {

            sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");

        } else {
            sr = SecureRandom.getInstance("SHA1PRNG");

        }

        sr.setSeed(seed);

        try {

            kgen.init(256, sr);

            // kgen.init(128, sr);

        } catch (Exception e) {

            // Log.w(LOG,
            // "This device doesn't suppor 256bits, trying 192bits.");

            try {

                kgen.init(192, sr);

            } catch (Exception e1) {

                // Log.w(LOG,
                // "This device doesn't suppor 192bits, trying 128bits.");

                kgen.init(128, sr);

            }

        }

        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"); // /ECB/PKCS7Padding", "SC");

        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"); // /ECB/PKCS7Padding", "SC");

        cipher.init(Cipher.DECRYPT_MODE, skeySpec);

        byte[] decrypted = cipher.doFinal(encrypted);

        return decrypted;

    }

    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 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 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 static void appendHex(StringBuffer sb, byte b) {

        sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f));

    }

}
这是我的日志猫堆栈跟踪

12-06 16:33:44.893: W/System.err(1024): java.lang.NumberFormatException: unable to parse '+' as integer
12-06 16:33:44.893: W/System.err(1024):     at java.lang.Integer.parse(Integer.java:383)
12-06 16:33:44.903: W/System.err(1024):     at java.lang.Integer.parseInt(Integer.java:372)
12-06 16:33:44.903: W/System.err(1024):     at java.lang.Integer.valueOf(Integer.java:528)
12-06 16:33:44.903: W/System.err(1024):     at com.window2india.EncodeDecodeAES.toByte(EncodeDecodeAES.java:183)
12-06 16:33:44.903: W/System.err(1024):     at com.window2india.EncodeDecodeAES.decrypt(EncodeDecodeAES.java:53)
12-06 16:33:44.903: W/System.err(1024):     at com.window2india.Login$GetJSONParse.onPostExecute(Login.java:195)
12-06 16:33:44.903: W/System.err(1024):     at com.window2india.Login$GetJSONParse.onPostExecute(Login.java:1)
12-06 16:33:44.903: W/System.err(1024):     at android.os.AsyncTask.finish(AsyncTask.java:417)
12-06 16:33:44.903: W/System.err(1024):     at android.os.AsyncTask.access$300(AsyncTask.java:127)
12-06 16:33:44.903: W/System.err(1024):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
12-06 16:33:44.903: W/System.err(1024):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-06 16:33:44.903: W/System.err(1024):     at android.os.Looper.loop(Looper.java:130)
12-06 16:33:44.903: W/System.err(1024):     at android.app.ActivityThread.main(ActivityThread.java:3683)
12-06 16:33:44.914: W/System.err(1024):     at java.lang.reflect.Method.invokeNative(Native Method)
12-06 16:33:44.914: W/System.err(1024):     at java.lang.reflect.Method.invoke(Method.java:507)
12-06 16:33:44.914: W/System.err(1024):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-06 16:33:44.914: W/System.err(1024):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-06 16:33:44.914: W/System.err(1024):     at dalvik.system.NativeStart.main(Native Method)
12-06 16:33:49.183: W/IInputConnectionWrapper(1024): showStatusIcon on inactive InputConnection

你能给我们提供完整的堆栈跟踪吗?萨提斯,谢谢你的重播。等一下,我将发布。问题似乎来自
result[i]=Integer.valueOf(hexString.substring(2*i,2*i+2),16).byteValue()您需要检查正在解析的字符串是否为integer@Sathish,我不明白你在说什么。请检查我在上一条评论中提到的代码块。。您正在将字符串解析为整数,对吗??如果是这样,请检查您正在解析整数的语句。。。我希望在代码块中只有你会遇到问题
12-06 16:33:44.893: W/System.err(1024): java.lang.NumberFormatException: unable to parse '+' as integer
12-06 16:33:44.893: W/System.err(1024):     at java.lang.Integer.parse(Integer.java:383)
12-06 16:33:44.903: W/System.err(1024):     at java.lang.Integer.parseInt(Integer.java:372)
12-06 16:33:44.903: W/System.err(1024):     at java.lang.Integer.valueOf(Integer.java:528)
12-06 16:33:44.903: W/System.err(1024):     at com.window2india.EncodeDecodeAES.toByte(EncodeDecodeAES.java:183)
12-06 16:33:44.903: W/System.err(1024):     at com.window2india.EncodeDecodeAES.decrypt(EncodeDecodeAES.java:53)
12-06 16:33:44.903: W/System.err(1024):     at com.window2india.Login$GetJSONParse.onPostExecute(Login.java:195)
12-06 16:33:44.903: W/System.err(1024):     at com.window2india.Login$GetJSONParse.onPostExecute(Login.java:1)
12-06 16:33:44.903: W/System.err(1024):     at android.os.AsyncTask.finish(AsyncTask.java:417)
12-06 16:33:44.903: W/System.err(1024):     at android.os.AsyncTask.access$300(AsyncTask.java:127)
12-06 16:33:44.903: W/System.err(1024):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
12-06 16:33:44.903: W/System.err(1024):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-06 16:33:44.903: W/System.err(1024):     at android.os.Looper.loop(Looper.java:130)
12-06 16:33:44.903: W/System.err(1024):     at android.app.ActivityThread.main(ActivityThread.java:3683)
12-06 16:33:44.914: W/System.err(1024):     at java.lang.reflect.Method.invokeNative(Native Method)
12-06 16:33:44.914: W/System.err(1024):     at java.lang.reflect.Method.invoke(Method.java:507)
12-06 16:33:44.914: W/System.err(1024):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-06 16:33:44.914: W/System.err(1024):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-06 16:33:44.914: W/System.err(1024):     at dalvik.system.NativeStart.main(Native Method)
12-06 16:33:49.183: W/IInputConnectionWrapper(1024): showStatusIcon on inactive InputConnection