2012-03-15 16 views
0

私は、このページからコードをstruggelingだ:http://www.androidsnippets.com/encrypt-decrypt-between-android-and-phpアンドロイド/ PHP - 暗号化と復号

私はAndroidのアプリケーションとその逆にサーバーからデータを送信したいが、それは暗号化された文字列として送信する必要があります。しかし、私はPHPの文字列を暗号化して解読することができます。しかし、Androidでは、解読時に以下のエラーメッセージが表示され、アプリケーションがクラッシュします。 java.lang.Exception:[解読]が '整数として解析できません。

ここでは、forループでこのエラーoccours:

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

答えて

0

あなたが「暗号化と復号化の話が、あなたしています数字のバイト(0x4Fなど)を文字列("4F"など)に変換するコードを表示します。これは、データの転送(バイナリ形式を転送できない場合)に関係しますが、暗号化/復号化とはまったく関係ありません。

あなたが持っているAndroidコードには1つのInteger解析しか含まれていないので、入力したものを調べたことがありますか? str.substring(i*2,i*2+2)には、例外が発生したときに明らかに[0-9A-F]以外のデータが含まれています。まず、受信した文字列を調べ、送信した文字列と比較して、一致することを確認し、16進文字のみを含むようにします。

編集 - あなたのhexToBytes()関数を通して文字列 "f46d86e65fe31ed46920b20255dd8ea6"を渡すことは完全に機能します。あなたの意見はおそらくあなたの考えではありません。

+0

03-15 19:56:36.882:I/System .out(6180):f46d86e65fe31ed46920b20255dd8ea6 入力値は正しいので、正しいと分かります:S – Araw

+0

あなたはすでに問題が文字列の解析であることを知っていますので、str.substring(i * 2、i * 2 + 2)をログに記録して、どのペアが例外につながっているかを判断できますか? – mah

+0

入力値をダブルチェックすると間違っているようです。 PHPページは実際の暗号化された文字列の前に4行の新しい行を追加しました。しかし、Androidで同じ文字列を暗号化すると、 が返されます。暗号化: m _ i Uݎ これはPHPバージョンに応じて間違っています。f46d86e65fe31ed46920b20255dd8ea6を返します。 – Araw