2012-03-15 97 views
0

我从这个页面代码struggeling:http://www.androidsnippets.com/encrypt-decrypt-between-android-and-php的Android/PHP - 加密和解密

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

此错误occours在这里的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

如果您想要获取最新版本的代码,请点击此处:https://github.com/SeRPRo/Android-PHP-Encrypt-Decrypt – SERPRO 2013-04-29 19:43:44

回答

0

,但你”重新显示只需将数字字节(如0x4F)转换为字符串(如"4F")的代码 - 这可能与您的数据传输(如果无法传输二进制格式)相关,但与加密/解密完全无关。

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

编辑 - 通过您的hexToBytes()函数传递字符串“f46d86e65fe31ed46920b20255dd8ea6”完美无缺地工作。您的输入可能不是您认为的。

+0

03-15 19:56:36.882:I/System .out(6180):f46d86e65fe31ed46920b20255dd8ea6 是输入值,所以它证明是正确的:S – Araw 2012-03-15 18:59:04

+0

你已经知道问题是与字符串的解析,所以你发送了str.substring(我* 2,我* 2 + 2)添加到日志中,以便确定导致异常的是哪一对? – mah 2012-03-15 20:43:41

+0

双重检查了输入值,似乎是错误的。 PHP页面在实际加密的字符串之前添加了四行新行。然而,当我在Android上进行加密相同的字符串返回 加密:M_Iüݎ 根据PHP版本,因为它返回f46d86e65fe31ed46920b20255dd8ea6 – Araw 2012-03-15 21:08:49