我试图将密码从LDAP导入到MySQL数据库。 当我看着已知密码test的userPassword属性,我得到这个:
userPassword:: e01ENX1DWTlyelVZaDAzUEszazZESmllMDlnPT0=
在这个阶段的密码是base64编码,解码后我得到这个:
{MD5}CY9rzUYh03PK3k6DJie09g==
– 它看起来不像CY9....string是MD5哈希,因为它不是32个字符(实际上是128位)。
– 它似乎没有base64编码,因为我没有得到解码后的test 。
– 当我生成我自己的MD5哈希test我得到098f6bcd4621d373cade4e832627b4f6 。
我发现这个perl脚本 (页面上的第二个),它会从test中生成{MD5}CY9rzUYh03PK3k6DJie09g== ,但是当我查看脚本时,我看不到我所缺less的内容,因为它看起来像md5哈希base64在与{MD5}连接之前进行编码:
$ctx = Digest::MD5->new; $ctx->add('secret'); $hashedPasswd = '{MD5}' . encode_base64($ctx->digest,'');
有人可以解释从test到CY9rzUYh03PK3k6DJie09g==的步骤吗?
你有没有检查PHP md5()函数的第二个参数?
cat md5.php <?php echo base64_encode(md5('test',true)); php md5.php CY9rzUYh03PK3k6DJie09g==
你应该使用原始的二进制格式(这就是为什么用base64编码)。