Android / PHP - 加密和解密

时间:2012-03-15 18:36:41

标签: android encryption

我正在使用此页面中的代码:http://www.androidsnippets.com/encrypt-decrypt-between-android-and-php

我想将数据从服务器发送到Android应用程序,反之亦然,但它应该作为加密字符串发送。但是,我设法在PHP中加密和解密字符串。但在Android上,解密时应用程序崩溃时出现以下错误消息: java.lang.Exception:[decrypt]无法解析'为整数。

此错误在for循环中出现:

    public static byte[] hexToBytes(String str) {
        if (str==null) {
                return null;
        } else if (str.length() < 2) {
                return null;
        } else {
                int len = str.length() / 2;
                byte[] buffer = new byte[len];

                for (int i=0; i<len; i++) {
                        buffer[i] = (byte) Integer.parseInt(str.substring(i*2,i*2+2),16);
                }
                System.out.println("Buffer: " + buffer);
                return buffer;
        }
}

这是应该解密的字符串:f46d86e65fe31ed46920b20255dd8ea6

1 个答案:

答案 0 :(得分:0)

您正在谈论加密和解密,但您显示的代码只是将数字字节(例如0x4F)转换为字符串(例如"4F") - 这可能与您的数据传输(如果您不能传输二进制格式),但与加密/解密完全无关。

由于您所拥有的Android代码只包含一个整数解析,您是否检查了您提供的输入?发生异常时,str.substring(i*2,i*2+2)显然包含[0-9A-F]以外的数据。您应该首先检查您收到的字符串并将其与您发送的字符串进行比较,以确保它们一致,并且它们只包含十六进制字符。

编辑 - 通过你的hexToBytes()函数传递字符串“f46d86e65fe31ed46920b20255dd8ea6”可以完美地运行。你的输入可能不是你想象的那样。