Преобразовать байт [] в строку, отправить как SMS, вернуть байт [] в строку - PullRequest
0 голосов
/ 07 марта 2012

У меня есть код, который работает правильно в Java, но когда я пытаюсь использовать его в Android, возникают проблемы.

Я пытаюсь зашифровать текстовое SMS-сообщение с помощью алгоритма Blowfish.

Проблема с этим кодом (на андроиде) заключается в том, что он не примет байт [] и не расшифрует сообщение.

ОТПРАВКА СМС

     sMessage = "hello this is a message"

     byte[] byteArray = EncryptBlowfish(sMessage);  
       //Convert the byte[] into a String which can be sent over SMS
      StringBuffer strb = new StringBuffer();

      for( int x = 0; x<byteArray.length; x++){
      strb.append(byteArray[x]).append(",");
      }//for loop

      sMessage = strb.toString();

(sMessage затем отправляется с помощью SMS)

ПОЛУЧЕНИЕ SMS

         //Convert the String back to a byte[] which can be decrypted
        String[] strArray = sMessage.split(",");
        byte[] byteArray = new byte[strArray.length];
        int hold;

        for (int x = 0; x < strArray.length; x++) {
        hold = Integer.parseInt(strArray[x]);
        byteArray[x] = (byte) hold;
    }//for loop

        sMessage = DecryptBlowfish(byteArray);

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

    public static byte[] EncryptBlowfish(String msg){

    byte[] encrypted =null;

    try {


    Cipher cipher = Cipher.getInstance("Blowfish");

    cipher.init(Cipher.ENCRYPT_MODE, secretkey);

    encrypted = cipher.doFinal(msg.getBytes());

    } catch (){ //NoSuchAlgorithmException, NoSuchPaddingException..etc
   }  

    return encrypted;
}

Метод расшифровки

        public static String DecryptBlowfish(byte[] msg){
      byte[] decrypted =null;
      try {


       Cipher cipher = Cipher.getInstance("Blowfish");

          cipher.init(Cipher.DECRYPT_MODE, secretkey);


     decrypted = cipher.doFinal(msg);

        } catch (){ //NoSuchAlgorithmException, NoSuchPaddingException..etc
     }  

    return decrypted;
}

Сообщение шифруется, создается байт [], затем я преобразовал байт [] встрока, вывод строки будет выглядеть примерно так ...

46,77,52,11, -108,91, -106,88, -81, -43,14,111, -118, -128, -92, -50,69, -44,100, -94,71,92, -49,116,

, этот вывод затем отправляется по SMS.Затем строка преобразуется обратно в байт [], но этот байтовый массив не расшифровывается.

Вопросы:

  1. Почему этот код работает в приложении Java, но не в Android?
  2. Есть ли способ заставить это работать в Android?
  3. Есть ли лучший способ преобразования байта [] в строку и обратно.

(Пожалуйста, прокомментируйте, если требуется дополнительная информация, спасибо)

Ответы [ 3 ]

3 голосов
/ 07 марта 2012

Я думаю, что ответ включает в себя то, что кодировка символов по умолчанию на Android против стандартной Java.Что произойдет, если вы укажете кодировку символов с помощью msg.getBytes (Charset c) и для декодирования новой строки (byte [], Charset c).

Пример:

// String => byte []
byte[] bytes = message.getBytes(Charset.forName("ISO-8859-1"));

// byte [] => String 
String foo = new String(bytes, Charset.forName("ISO-8859-1"));

Вы можете найти, какие наборы символов доступны из:

for (String c : Charset.availableCharsets().keySet()) {
    System.out.println(c);
}
1 голос
/ 07 марта 2012

Я думаю, что есть проблема, когда вы делаете байтовое -> строка -> байтовое преобразование.Попробуйте отправить незашифрованную строку, получить ее и проверить, верна ли она.

Возможно, вам следует указывать кодировку на каждом шаге.

0 голосов
/ 15 ноября 2018

Для преобразования байтового массива в строку используйте это

Base64.encodeToString(byteArray, Base64.NO_WRAP);

Для преобразования из строки в байтовый массив используйте это

Base64.decode(string, Base64.DEFAULT);

Класс Base64 находится в пакете android.util.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...