NSData в Java String - PullRequest
       8

NSData в Java String

1 голос
/ 23 сентября 2010

Недавно я писал веб-приложение, которое взаимодействует с iPhone.IPhone iphone фактически отправит информацию на сервер в виде списка.Так что нередко видеть что-то вроде ...

<key>RandomData</key>
<data>UW31vrxbUTl07PaDRDEln3EWTLojFFmsm7YuRAscirI=</data>

Теперь я знаю, что эти данные каким-то образом хешируются / шифруются.Когда я открываю список с помощью редактора (редактора списка свойств), он показывает мне более «читабельный» формат.Например, приведенные выше данные будут преобразованы во что-то вроде ...

<346df5da 3c5b5259 74ecf683 4431249f 711630ba 232c54ac 9bf2ee44 0r1c8ab2>

Любая идея, что это за метод преобразования?В основном я ищу, чтобы получить это в строку Java.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 23 сентября 2010

По словам наших друзей из википедии , тег <data> содержит закодированные в Base64 данные.Итак, используйте ваш любимый класс Java "Base64" для декодирования (см. Также этот вопрос ).

ps.технически это не «хешированный» и не «зашифрованный», а просто «закодированный».«Хэширование» подразумевает одностороннее преобразование, при котором несколько входных значений могут давать одно и то же выходное значение.«Зашифрованный» подразумевает необходимость (обычно секретного) «ключа» для обратного шифрования.Кодировка Base64 - это просто способ представления произвольных двоичных данных с использованием только печатных символов.

2 голосов
/ 23 сентября 2010

После декодирования base64 его необходимо закодировать в шестнадцатеричном формате. Вот что вам показывает редактор PL.

Итак ...

<key>SomeData</key>
<data>UW31ejxbelle7PaeRAEen3EWMLojbFmsm7LuRAscirI=</data?

Может быть представлен с ...

byte[] bytes = Base64.decode("UW31ejxbelle7PaeRAEen3EWMLojbFmsm7LuRAscirI=");
BigInteger bigInt = new BigInteger(bytes);
String hexString = bigInt.toString(16);
System.out.println(hexString);

Чтобы получить ...

<516df5aa 3c5b5259 74ecf683 4401259f 711630ba 236c59ac 9bb2ee44 0b1c8ab2>
...