代码之家  ›  专栏  ›  技术社区  ›  Donal Rafferty

JavaMD5哪一个是正确的?

  •  1
  • Donal Rafferty  · 技术社区  · 15 年前

    我正在尝试SIP注册,并从服务器获得挑战。

    所以我需要在nonce上使用MD5算法,然后将其发送到服务器进行身份验证。

    我遇到了两个MD5加密的例子,我尝试了这两个方法,每个方法都给了我一个不同的字符串,所以我想知道使用哪一个是正确的?

    提前谢谢

    编辑:

    好的,谢谢你的通用编解码器。

    我编辑它是因为我必须用用户名和密码对从服务器返回的nonce值进行编码,才能将其发送回去。

    因此,它是一种用于SIP注册的分离性编码类型,有人能指出一个如何做到这一点的教程吗?或者有什么提示?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Malax    15 年前

    两者都不正确。从字节数组到十六进制字符串的转换已中断。我强烈推荐使用 http://commons.apache.org/codec/ 来自ASF,它可以为您做这件事:

    Hex.encodeHexString(yourByteArray);
    

    但是,如果您使用的是通用编解码器,也可以这样做:

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

    你就完了。整洁,不是吗?-)

        2
  •  1
  •   Joachim Sauer    15 年前

    第一个问题的一个明显问题是,您以错误的方式生成十六进制字符串。当任何值 messageDigest 小于16,则将生成一个单数字十六进制字符串(例如 A )而不是两位数的( 0A )

    推荐文章