[英]Unable to decrypt MD5 hashed byte array
我正在使用带有Spring LDAP的Apache DS进行身份验证和用户管理。 Apache DS将密码字段作为散列字节数组发送,因此我需要将其解密为String。 我正在使用MD5哈希。
例如,这是用于使用Apache DS Studio输入密码的窗口:
(为了演示,我想告诉输入的密码是1 )
Apache DS将密码字段作为散列字节数组发送。 当我尝试使用如下所示的Spring LDAP时,我得到了[B @ 66ca6254 。 我需要解密它并获得它的十六进制值,如上所示,它是c4ca4238a0b923820dcc509a6f75849b 。
你有两个问题:
toString()
。 这就是赋予值“[B @ 66ca6254”的价值,这表明您调用它的对象是字节数组,然后是散列。 您真正感兴趣的是字节数组的十六进制表示。 基本上你只需要将字节数组转换为十六进制字符串。 有多种方法可以做到这一点 - 在您自己的代码中,或使用第三方库,如Apache Commons Code及其Hex
类。 如果您不想包含额外的库,则Stack Overflow上有大量用于字节数组到十六进制字符串转换的代码片段,例如此处 。 (还有javax.xml.bind.DataTypeConverter
,但我个人不想将它用于一般转换 - 它闻起来像我特定的XML类型。我敢说它会工作正常,它只是给了代码中的错误印象。)
编辑:既然你已经告诉我们你得到的字节,你不只是想使用十六进制。 您已经获得了ASCII编码形式的"{MD5}xMpCOKC5I4INzFCab3WEmw=="
,它本身表明它是MD5,然后是base64编码版本。 你应该:
new String(data, "ASCII")
将字节数组转换为字符串 "{MD5}"
开头 你不能解密MD5哈希,它是单向哈希函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.