2012-03-15 4 views
0

Я struggeling с кодом с этой страницы: http://www.androidsnippets.com/encrypt-decrypt-between-android-and-phpAndroid/PHP - Шифрование и дешифрование

Я хочу, чтобы отправить данные с сервера на Android приложения, и наоборот, но оно должно быть отправлено в виде зашифрованной строки , Тем не менее, мне удается шифровать и расшифровывать строку в PHP. Но на Android приложение деактивирует следующее сообщение об ошибке при расшифровке: java.lang.Exception: [decrypt] невозможно разобрать «как целое число».

Это 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

Вы говорите о шифрования и дешифрования, но вы re, показывающий код, который просто превращает числовые байты (например, 0x4F) в строки (например, "4F") - которые могут иметь отношение к вашей передаче данных (если вы не можете передавать двоичный формат), но полностью не связаны с шифрованием/расшифровкой.

Поскольку код Android содержит только один синтаксис Integer, вы изучили введенный вами ввод? str.substring(i*2,i*2+2), по-видимому, содержит данные, отличные от [0-9A-F], когда возникает исключение. Вы должны начать с изучения полученной строки и сравнения ее с тем, что вы отправили, чтобы убедиться, что они согласны, и они содержат только шестнадцатеричные символы.

Редактировать - передача строки «f46d86e65fe31ed46920b20255dd8ea6» через вашу функцию hexToBytes() работает безупречно. Ваш вход, вероятно, не тот, который вы так считаете.

+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 добавила четыре новые строки до фактической зашифрованной строки. Тем не менее, когда я шифрую ту же строку на Android, он возвращает Зашифрованный: m _ i U ݎ Что неправильно в соответствии с PHP-версией, так как это возвращает f46d86e65fe31ed46920b20255dd8ea6 – Araw

Смежные вопросы