MD5 十六进制转 Base64 字符串

MD5 十六进制转 Base64 字符串

当我使用纯文本 ( password) 生成 MD5 哈希时,我得到:

$echo -n "password" |  openssl dgst -md5 -binary | openssl enc -base64
X03MO1qnZdYdgyfeuILPmQ==

如果我知道纯文本,这个方法就可以正常工作,但是我在 DB ( B081DBE85E1EC3FFC3D4E7D0227400CD) 中得到了一个包含未知纯文本的 MD5 十六进制字符串,并且想要将其转换为二进制 Base64 编码字符串。

$echo 0: B081DBE85E1EC3FFC3D4E7D0227400CD | xxd -r | openssl enc -base64
sIHb6F4ew//D1OfQInQAzQ==

两个输出都不匹配,我希望得到第一个值(X03MO1qnZdYdgyfeuILPmQ==)而不是第二个值(sIHb6F4ew//D1OfQInQAzQ==

知道如何使用生成的 MD5 Hex 字符串获取 Base64 编码字符串吗?

答案1

...但是我在 DB (B081DBE85E1EC3FFC3D4E7D0227400CD) 中得到了一个包含未知纯文本的 MD5 十六进制字符串,并且想要将其转换为二进制 Base64 编码字符串。

虽然此字符串是 MD5,但password它不是 ASCII 编码的 MD5 password,而是 UTF-16LE(Windows 上的本机字符编码):

$ echo -n "password" | openssl dgst -md5
(stdin)= 5f4dcc3b5aa765d61d8327deb882cf99

echo -n "password" | iconv -t utf-16le | openssl dgst -md5
(stdin)= b081dbe85e1ec3ffc3d4e7d0227400cd

将十六进制解码为二进制,然后将其编码为 base64 的这一行完全没问题,只是您对结果的期望是错误的。如果您对结果有正确的期望(通过使用正确的字符编码),则一切都会正常:

$ echo -n "password" |  iconv -t utf-16le | openssl dgst -md5 -binary | openssl enc -base64
sIHb6F4ew//D1OfQInQAzQ==

$ echo 0: B081DBE85E1EC3FFC3D4E7D0227400CD | xxd -r | openssl enc -base64
sIHb6F4ew//D1OfQInQAzQ==

相关内容