当我使用纯文本 ( 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==