2010-02-09 3 views
1

Я пытаюсь Sip Register, и я получаю вызов с сервера.Java MD5, который один из них правильный?

Так что мне нужно использовать алгоритм MD5 на nonce, а затем отправить его на сервер для аутентификации.

Я столкнулся с двумя примерами шифрования MD5, и я попробовал оба, и каждый из них дает мне другую строку, поэтому мне было интересно, какой из них правильный?

Заранее спасибо

EDIT:

Ok спасибо за Общины кодеков.

Я отредактировал его, потому что мне нужно кодировать значение nonce. Я возвращаюсь с сервера с моим именем пользователя и паролем, чтобы отправить его обратно.

Так что это особый тип кодирования для регистрации SIP, может ли кто-нибудь указать на учебник о том, как это сделать? Или есть какие-то намеки?

+3

FYI: MD5 - это хэш *, а не * шифр * –

ответ

2

Оба являются неверными. Прервано преобразование из массива байтов в шестнадцатеричную строку. Я настоятельно рекомендую использовать http://commons.apache.org/codec/ из ASF, которые могут сделать это для вас:

Hex.encodeHexString(yourByteArray); 

Но если вы используете Викисклада кодек, вы также можете сделать это:

String sessionid = "1ddfdf99abfe5690dc1243875"; 
String md5HexString = DigestUtils.md5Hex(sessionid); 

и вы сделали , Аккуратно, не так ли? :-)

+0

Каков наилучший способ сделать это без использования кодека общего пользования? Не уверены в лицензировании кодека commons –

+1

Apache Commons лицензируется в соответствии с лицензией Apache, которая не должна причинять никакого вреда. http://commons.apache.org/license.html или, если вы предпочитаете запись в Википедии без легализации: http://en.wikipedia.org/wiki/Apache_License – Malax

1

Одна очевидная проблема с первой заключается в том, что вы произвольно создаете шестую строку. Когда любое значение в messageDigest меньше 16, вы создадите одноразрядную шестую строку (например, A) вместо двухзначной (0A).

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