2013-08-15 3 views
1

Я пытаюсь вычеркнуть зашифрованную строку, используя следующие методы, но застрял с Исключением.Формат номера Исключение при расшифровке строки

Я пытаюсь отправить мою зашифрованную строку ниже, но он не смог получить байт [], получив исключение формата номера при преобразовании строки в байт [].

Мой дешифрование Метод:

public static String decrypt(String seed, String encrypted) throws Exception { 

    byte[] seedByte = seed.getBytes(); 

    System.arraycopy(seedByte, 0, key, 0, ((seedByte.length < 16) ? seedByte.length : 16)); 

    String base64 = new String(Base64.decode(encrypted, 0)); 

    byte[] rawKey = getRawKey(seedByte); 

    byte[] enc = toByte(base64); 

    byte[] result = decrypt(rawKey, enc); 

    return new String(result); 

    } 

Вот мой toByte метод (String):

public static byte[] toByte(String hexString) { 

    int len = hexString.length()/2; 

    byte[] result = new byte[len]; 

    for (int i = 0; i < len; i++) 

    result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2), 16).byteValue(); 

    return result; 

    } 

Exception Я получаю:

08-15 13:03:04.748: W/System.err(10013): java.lang.NumberFormatException: Invalid int: "@��" 
08-15 13:03:04.748: W/System.err(10013): at java.lang.Integer.invalidInt(Integer.java:138) 
08-15 13:03:04.748: W/System.err(10013): at java.lang.Integer.parse(Integer.java:375) 
08-15 13:03:04.748: W/System.err(10013): at java.lang.Integer.parseInt(Integer.java:366) 
08-15 13:03:04.748: W/System.err(10013): at java.lang.Integer.valueOf(Integer.java:510) 
08-15 13:03:04.748: W/System.err(10013): at com.example.aes.EncodeDecodeAES.toByte(EncodeDecodeAES.java:226) 
08-15 13:03:04.748: W/System.err(10013): at com.example.aes.EncodeDecodeAES.decrypt(EncodeDecodeAES.java:69) 
08-15 13:03:04.748: W/System.err(10013): at com.example.aes.MainActivity$1.run(MainActivity.java:94) 

Я действительно не понимал, почему я получив эту ошибку.

Просьба предложить.

+1

Не иметь IDE здесь, но это может быть, что это проблема кодировки? – DennisH

+0

я не знаю, что do.can вы дать мне какие-либо предложения – koti

+0

попробовать для кодирования/декодирования эти пакеты: sun.misc.BASE64Decoder sun.misc.BASE64Encoder – DennisH

ответ

0

Я думаю, что проблема здесь синтаксический анализ в массив байт вы здесь:

result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2), 16).byteValue(); 

Вы можете попробовать этот подход (учитывая 4 байтовое целое, и что вы хотите разделить шестнадцатеричный на две цифру целые):

byte[][] result = new byte[len][4]; 
int[] numbers = new int[len]; 
for(int j = 0; j < len ; j++){ 
    numbers[j] = Integer.parseInt(hexString.substring(2 * j, 2 * j + 2); 
} 

for (i = 0; i < len; i++){ 
    result[i][3] = (byte) numbers[i] & 0xFF);//No need for shifting here 
    for(j = 0; j < len-1; j++){ 
    result[i][j] = (byte) ((numbers[i] >> ((-1)*j*8+24)) & 0xFF); 
    } 
} 

проблема с реализацией является то, что вы разбить строку на несколько целых чисел, и вы присваивание byte_array [0] только первый байт целого числа, то к byte_array [1] первый байт второго целого числа. Знайте, что весь массив байтов длины 4 используется для хранения единственного целого.

+0

где мне нужно использовать мой шестнадцатеричной здесь – koti

+0

посоветуете, где должен Я использую мой hexString – koti

+0

Извините, я отредактировал ответ - проверьте его. – g00dy

0

Похоже, что у вас есть некорректные байты в вашей шестнадцатеричной строке. Попробуйте проверки, прежде чем поместить его в массив байтов например сделать что-то вроде этого:

if(new Scanner(hexString.substring(2 * i, 2 * i + 2), 16).hasNextInt()) 
     result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2), 16).byteValue()  
+0

Входит в это условие if. пожалуйста, предложите любое другое решение – koti

+0

Я получаю ошибку при этом условии if() сам – koti

+0

что именно соответствует строке EncodeDecodeAES.java:226? –

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