2010-02-09 60 views
1

我正在嘗試SIP註冊,並從服務器獲取挑戰。Java MD5哪一個是正確的?

所以我需要在nonce上使用MD5算法,然後發送到服務器進行身份驗證。

我遇到過兩個MD5加密的例子,我試過兩個,每個都給我一個不同的字符串,所以我想知道哪一個是正確的使用?

在此先感謝

編輯:

的公共編解碼器好,謝謝。

我編輯過它,因爲我必須使用我的用戶名和密碼從服務器獲取的nonce值進行編碼以將其發回。

因此,它是SIP註冊的一種特殊類型的編碼,任何人都可以指向如何做到這一點的教程?或有任何提示?

+3

供參考:MD5是*散列*,而不是*密碼* – 2010-02-09 17:33:14

回答

2

兩者都不正確。從字節數組到十六進制字符串的轉換已中斷。我強烈建議使用http://commons.apache.org/codec/從ASF,可以爲你做這個:

Hex.encodeHexString(yourByteArray); 

但如果你使用公共編解碼器,你也可以這樣做:

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

,即可大功告成。整潔,不是嗎? :-)

+0

最好的方式做到這一點,但不使用公共編解碼器?不知道在公共編解碼器的授權許可 – 2010-02-09 18:17:36

+1

Apache Commons是根據Apache許可證進行的,不應該造成任何傷害。 http://commons.apache.org/license.html,或者,如果您更喜歡維基百科條目而沒有合法性:http://en.wikipedia.org/wiki/Apache_License – Malax 2010-02-09 22:03:10

1

第一個問題的一個明顯問題是您以錯誤的方式生成十六進制字符串。當messageDigest中的任何值小於16時,您將生成一個一位十六進制字符串(例如A)而不是兩位數字(0A)。

相關問題