Подтвердить что ты не робот

Преобразование строки в массив байтов, а затем обратно в исходную строку

Можно ли преобразовать строку в массив байтов, а затем преобразовать ее обратно в исходную строку на Java или Android?

Моя цель - отправить некоторые строки на микроконтроллер (Arduino) и сохранить его в EEPROM (это всего лишь 1 KB). Я попытался использовать хеш MD5, но, похоже, это только одностороннее шифрование. Что я могу сделать для решения этой проблемы?

4b9b3361

Ответ 1

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

byte[] bytes = text.getBytes("UTF-8");
String text = new String(bytes, "UTF-8");

Используя явное кодирование (и поддерживающее все Unicode), вы избегаете проблем с вызовом text.getBytes() и т.д.:

  • Вы явно используете конкретную кодировку, поэтому вы знаете, какую кодировку использовать позже, вместо того, чтобы полагаться на платформу по умолчанию.
  • Вы знаете, что он будет поддерживать все Unicode (в отличие от, скажем, ISO-Latin-1).

EDIT: Несмотря на то, что UTF-8 является кодировкой по умолчанию на Android, я определенно буду откровенен в этом. Например, этот вопрос говорит только "на Java или Android" - поэтому вполне возможно, что код будет использоваться на других платформах.

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

EDIT: В моей спешке я забыл упомянуть, что вам не нужно использовать имя кодировки - вместо этого вы можете использовать Charset. Используя Guava Я бы действительно использовал:

byte[] bytes = text.getBytes(Charsets.UTF_8);
String text = new String(bytes, Charsets.UTF_8);

Ответ 2

Вы можете сделать это следующим образом.

Строка в массив байтов

String stringToConvert = "This String is 76 characters long and will be converted to an array of bytes";
byte[] theByteArray = stringToConvert.getBytes();

http://www.javadb.com/convert-string-to-byte-array

Байт-массив для строки

byte[] byteArray = new byte[] {87, 79, 87, 46, 46, 46};
String value = new String(byteArray);

http://www.javadb.com/convert-byte-array-to-string

Ответ 3

Используйте [String.getBytes()][1] для преобразования в байты и используйте конструктор [String(byte[] data)][2] для преобразования обратно в строку.

Ответ 5

import java.io.FileInputStream; import java.io.ByteArrayOutputStream;

открытый класс FileHashStream {   // напишем новый метод, который предоставит новый массив байтов, и где это обычно читается из входного потока

public static byte[] read(InputStream is) throws Exception
{
    String path = /* type in the absolute path for the 'commons-codec-1.10-bin.zip' */;

    // must need a Byte buffer

    byte[] buf = new byte[1024 * 16]

    // we will use 16 kilobytes

    int len = 0;

    // we need a new input stream

    FileInputStream is = new FileInputStream(path);

    // use the buffer to update our "MessageDigest" instance

    while(true)
    {
        len = is.read(buf);
        if(len < 0) break;
        md.update(buf, 0, len);
    }

    // close the input stream

    is.close();

    // call the "digest" method for obtaining the final hash-result

    byte[] ret = md.digest();

    System.out.println("Length of Hash: " + ret.length);

    for(byte b : ret)
    {
        System.out.println(b + ", ");
    }

    String compare = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d";

    String verification = Hex.encodeHexString(ret);

    System.out.println();

    System.out.println("===")

    System.out.println(verification);

    System.out.println("Equals? " + verification.equals(compare));

}

}