Je ne mets pas en résolu, d'abord parce que ça ne l'est pas et ensuite parce que je ne désespère pas de trouver une solution.
<?php
function generate_salt($len) {
$randset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
$randset .= './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
$salt = "";
for ($i=0;$i<$len;$i++) {
$choice = rand(0,strlen($randset)-1);
$salt .= (substr($randset,$choice,1));
}
return $salt;
}
function encrypt_password_for_apache($plain,$ptype) {
/*
adapted from:
http://www.student.oulu.fi/~samiantt/scripts/authuser.php
*/
switch ($ptype) {
case "SHA": //
return '{SHA}' . base64_encode(pack('H*', sha1($plain)));
break;
case "MD5":
$salt = generate_salt(8);
$length = strlen($plain);
$context = $plain . '$apr1$' . $salt;
$binary = pack('H32', md5($plain . $salt . $plain));
for($i = $length; $i > 0; $i -= 16) {
$context .= substr($binary, 0, min(16, $i));
}
for($i = $length; $i > 0; $i >>= 1) {
$context .= ($i & 1) ? chr(0) : $plain{0};
}
$binary = pack('H32', md5($context));
for($i = 0; $i < 1000; $i++) {
$new = ($i & 1) ? $plain : $binary;
if ($i % 3) $new .= $salt;
if ($i % 7) $new .= $plain;
$new .= ($i & 1) ? $binary : $plain;
$binary = pack('H32', md5($new));
}
$q = '';
for ($i = 0; $i < 5; $i++) {
$k = $i + 6;
$j = $i + 12;
if ($j == 16) $j = 5;
$q = $binary{$i} . $binary{$k} . $binary{$j} . $q;
}
$q = chr(0) . chr(0) . $binary{11} . $q;
$q = strtr(strrev(substr(base64_encode($q), 2)),
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
'./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');
return "\$apr1\$$salt\$$q";
break;
default:
return crypt($plain, generate_salt(2));
break;
}
}
//Appel de la fonction avec le mot de passe 'bikette71'
$plain2=encrypt_password_for_apache("bikette71","MD5");
echo $plain2;
?>