我正在嘗試SIP註冊,並從服務器獲取挑戰。Java MD5哪一個是正確的?
所以我需要在nonce上使用MD5算法,然後發送到服務器進行身份驗證。
我遇到過兩個MD5加密的例子,我試過兩個,每個都給我一個不同的字符串,所以我想知道哪一個是正確的使用?
在此先感謝
編輯:
的公共編解碼器好,謝謝。
我編輯過它,因爲我必須使用我的用戶名和密碼從服務器獲取的nonce值進行編碼以將其發回。
因此,它是SIP註冊的一種特殊類型的編碼,任何人都可以指向如何做到這一點的教程?或有任何提示?
我正在嘗試SIP註冊,並從服務器獲取挑戰。Java MD5哪一個是正確的?
所以我需要在nonce上使用MD5算法,然後發送到服務器進行身份驗證。
我遇到過兩個MD5加密的例子,我試過兩個,每個都給我一個不同的字符串,所以我想知道哪一個是正確的使用?
在此先感謝
編輯:
的公共編解碼器好,謝謝。
我編輯過它,因爲我必須使用我的用戶名和密碼從服務器獲取的nonce值進行編碼以將其發回。
因此,它是SIP註冊的一種特殊類型的編碼,任何人都可以指向如何做到這一點的教程?或有任何提示?
兩者都不正確。從字節數組到十六進制字符串的轉換已中斷。我強烈建議使用http://commons.apache.org/codec/從ASF,可以爲你做這個:
Hex.encodeHexString(yourByteArray);
但如果你使用公共編解碼器,你也可以這樣做:
String sessionid = "1ddfdf99abfe5690dc1243875";
String md5HexString = DigestUtils.md5Hex(sessionid);
,即可大功告成。整潔,不是嗎? :-)
最好的方式做到這一點,但不使用公共編解碼器?不知道在公共編解碼器的授權許可 – 2010-02-09 18:17:36
Apache Commons是根據Apache許可證進行的,不應該造成任何傷害。 http://commons.apache.org/license.html,或者,如果您更喜歡維基百科條目而沒有合法性:http://en.wikipedia.org/wiki/Apache_License – Malax 2010-02-09 22:03:10
第一個問題的一個明顯問題是您以錯誤的方式生成十六進制字符串。當messageDigest
中的任何值小於16時,您將生成一個一位十六進制字符串(例如A
)而不是兩位數字(0A
)。
供參考:MD5是*散列*,而不是*密碼* – 2010-02-09 17:33:14