我正在使用此页面中的代码: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
答案 0 :(得分:0)
您正在谈论加密和解密,但您显示的代码只是将数字字节(例如0x4F
)转换为字符串(例如"4F"
) - 这可能与您的数据传输(如果您不能传输二进制格式),但与加密/解密完全无关。
由于您所拥有的Android代码只包含一个整数解析,您是否检查了您提供的输入?发生异常时,str.substring(i*2,i*2+2)
显然包含[0-9A-F]以外的数据。您应该首先检查您收到的字符串并将其与您发送的字符串进行比较,以确保它们一致,并且它们只包含十六进制字符。
编辑 - 通过你的hexToBytes()函数传递字符串“f46d86e65fe31ed46920b20255dd8ea6”可以完美地运行。你的输入可能不是你想象的那样。