2012-03-15 98 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