Шифрование паролей LDAP (атрибут userPassword)

Я пытаюсь импортировать пароли из LDAP в базу данных MySQL. Когда я смотрю на userPassword атрибут для известного пароля test Я получаю это:

userPassword:: e01ENX1DWTlyelVZaDAzUEszazZESmllMDlnPT0=

Пароль на этом этапе base64 закодированный, после декодирования я получаю это:

{MD5}CY9rzUYh03PK3k6DJie09g==

-Это не похоже на CY9.... string является хешем 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).

Другие вопросы по тегам