我正在使用带有Spring LDAP的Apache DS进行身份验证和用户管理。 Apache DS将密码字段作为散列字节数组发送,因此我需要将其解密为String。我正在使用 MD5 哈希。
例如,这是用于使用Apache DS Studio输入密码的窗口:
(为了演示,我想告诉输入的密码 1 )
Apache DS将密码字段作为散列字节数组发送。当我尝试使用如下的Spring LDAP时,我得到了 [B @ 66ca6254 。我需要解密它并获得它的十六进制值,如上面所示 c4ca4238a0b923820dcc509a6f75849b 。
答案 0 :(得分:3)
你有两个问题:
toString()
。这就是赋予值“[B @ 66ca6254”的价值,这表明您调用它的对象是字节数组,然后是散列。你真正感兴趣的是字节数组的十六进制表示。基本上你只需要将字节数组转换为十六进制字符串。有多种方法可以做到这一点 - 在您自己的代码中,或使用第三方库,如Apache Commons Code及其Hex
类。如果您不想包含额外的库,则在堆栈溢出上有字节数组到十六进制字符串转换的加载代码片段,例如here。 (还有javax.xml.bind.DataTypeConverter
,但我个人不想将它用于一般转换 - 它对我来说太像是特定于XML的类型。我敢说它会工作正常,它只是给人一种错误的印象在代码中。)
"{MD5}xMpCOKC5I4INzFCab3WEmw=="
的ASCII编码形式,它本身显示它是MD5,然后是base64编码版本。因此,您应该:
new String(data, "ASCII")
"{MD5}"
答案 1 :(得分:0)
你不能解密MD5哈希,它是单向哈希函数。