Criptografia de senhas LDAP (atributo userPassword)

6

Estou tentando importar senhas de um LDAP para um banco de dados MySQL. Quando olho para o atributo userPassword da senha conhecida test , recebo isto:

userPassword:: e01ENX1DWTlyelVZaDAzUEszazZESmllMDlnPT0=

A senha neste estágio é base64 codificada, depois da decodificação eu recebo isto:

{MD5}CY9rzUYh03PK3k6DJie09g==

-Não parece que a string CY9.... seja um hash MD5 porque não tem 32 caracteres (na verdade 128 bits). -Ele não parece ser base64 codificado porque não recebo test após a decodificação.
-Além disso, quando eu gerar meu próprio MD5 hash de test , recebo 098f6bcd4621d373cade4e832627b4f6 .

Eu encontrei este script perl (segundo na página) que gera {MD5}CY9rzUYh03PK3k6DJie09g== de test , mas quando olho para o script, não vejo o que está faltando, pois parece que o md5 hash recebe base64 codificado antes de ser concatenado com {MD5} :

$ctx = Digest::MD5->new;
$ctx->add('secret');
$hashedPasswd = '{MD5}' . encode_base64($ctx->digest,'');

Alguém pode explicar a etapa para ir de test a CY9rzUYh03PK3k6DJie09g== ?

    
por Max 17.12.2011 / 18:50

1 resposta

4

Você verificou o segundo parâmetro da função PHP md5 ()?

cat md5.php 
<?php echo base64_encode(md5('test',true));

php md5.php 
CY9rzUYh03PK3k6DJie09g==

Você deve usar o formato binário bruto (e é por isso que foi codificado com base64).

    
por 17.12.2011 / 19:34