изменения подписи - PullRequest
       1

изменения подписи

0 голосов
/ 20 декабря 2011

Может кто-нибудь предложить мне, как преобразовать массив байтов в строку?Этот метод не работает:

byte [] my_array=....;
String my_string = new String (my_array);

или

String my_string = my_array.toString();

Я хочу преобразовать подпись в строку и передать ее другой стороне.Но когда я использую метод выше и метод, то сигнатура my_string.getBytes () изменяется, а затем не удается проверить.

Я имею в виду, например, изменения my_string, когда я делаю my_string.getBytes().toString() или изменения my_array после (new String(my_array)).getBytes()

Спасибо.

Ответы [ 3 ]

4 голосов
/ 20 декабря 2011

(Вы не указали это явно, но я предполагаю, что ваш байтовый массив является какой-то криптографической подписью.)

Вы делаете две вещи неправильно здесь:

  • Попытка создать строку из произвольного байтового массива напрямую: ваш байтовый массив не представляет кодированный текст, поэтому не обрабатывайте его таким образом.
  • Даже если он сделал , вы будете использовать кодировку платформы по умолчанию, что почти всегда является плохой идеей.

Наиболее распространенный способ обработки произвольных двоичных данных в виде текста в обратимой форме - этоиспользуйте base64 .Здесь есть общедоступная библиотека Java base64 здесь (и множество других бесплатных опций):

byte[] signature = ...;
String signatureBase64 = Base64.encode(signature);

// Propagate signatureBase64 to the other side, then...

byte[] signature = Base64.decode(signatureBase64);
1 голос
/ 20 декабря 2011

И new String(), и getBytes() неявно используют кодировку платформы по умолчанию и перегружены, чтобы позволить вам указать кодировку (что почти всегда должно быть сделано).По-видимому, кодировка по умолчанию вашей платформы не может представлять все байтовые значения в вашем массиве.

Но желание преобразовать байты в строку и обратно - почти всегда неправильная вещь, которую нужно делать в первую очередь.Что именно содержит эта «подпись», и какова эта «другая сторона», для которой, по вашему мнению, нужно преобразовать ее в строку?

0 голосов
/ 20 декабря 2011

Вы должны кодировать байтовый массив в Base64. Вы также можете использовать методы - printBase64Binary() и parseBase64Binary() из javax.xml.bind.DatatypeConverter для кодирования или декодирования Base64.

...