我正在尝试将密码从 LDAP 导入到 MySQL 数据库。当我查看userPassword
已知密码的属性时test
,我得到了以下信息:
userPassword:: e01ENX1DWTlyelVZaDAzUEszazZESmllMDlnPT0=
此阶段的密码是base64
编码的,解码后得到以下结果:
{MD5}CY9rzUYh03PK3k6DJie09g==
- 该字符串看起来不像CY9....
是 MD5 哈希,因为它的长度不是 32 个字符(实际上是 128 位)。-
它似乎也没有被编码,因为解码后base64
我也没有得到。- 此外,当我生成自己的哈希时,我得到了。test
MD5
test
098f6bcd4621d373cade4e832627b4f6
我发现这个 perl 脚本(页面上的第二个)确实是{MD5}CY9rzUYh03PK3k6DJie09g==
从生成的test
,但是当我查看脚本时,我没有看到我遗漏了什么,因为它看起来像是哈希在与以下内容连接之前md5
被编码了:base64
{MD5}
$ctx = Digest::MD5->new;
$ctx->add('secret');
$hashedPasswd = '{MD5}' . encode_base64($ctx->digest,'');
test
有人可以解释一下从 到的步骤CY9rzUYh03PK3k6DJie09g==
吗?
答案1
您是否检查过 PHP md5() 函数的第二个参数?
cat md5.php
<?php echo base64_encode(md5('test',true));
php md5.php
CY9rzUYh03PK3k6DJie09g==
您应该使用原始二进制格式(这就是使用 base64 编码的原因)。