J'utilise MD5/Hash et BASE64 ENCODE Fonctions pour les mots de passe, donc je n'ai pas vraiment un soin ce qu'ils entrent aussi longtemps qu'ils répondent aux exigences minimales ... Les mots de passe fortement typés sont recommandés.
function get_rnd_iv($iv_len)
{
$iv = '';
while ($iv_len-- > 0) {
$iv .= chr(mt_rand() & 0xff);
}
return $iv;
}
function md5_encrypt($string_value, $salt_key, $iv_len = 16)
{
$string_value .= "\x13";
$n = strlen($string_value);
if ($n % 16) $string_value .= str_repeat("\0", 16 - ($n % 16));
$i = 0;
$enc_text = get_rnd_iv($iv_len);
$iv = substr($salt_key^$enc_text, 0, 512);
while ($i < $n) {
$block = substr($string_value, $i, 8)^pack('H*', md5($iv));
$enc_text .= $block;
$iv = substr($block . $iv, 0, 512)^$salt_key;
$i += 16;
}
return urlencode(base64_encode($enc_text));
}
function md5_decrypt($enc_text, $salt_key, $iv_len = 16)
{
$enc_text = urldecode(base64_decode($enc_text));
$n = strlen($enc_text);
$i = $iv_len;
$string_value = '';
$iv = substr($salt_key^substr($enc_text, 0, $iv_len), 0, 512);
while ($i < $n) {
$block = substr($enc_text, $i, 8);
$string_value .= $block^pack('H*', md5($iv));
$iv = substr($block . $iv, 0, 512)^$salt_key;
$i += 16;
}
return preg_replace('/\\x13\\x00*$/', '', $string_value);
}
+1 Le hachage est également un bon point. – TNi
thats bon - n'a pas md5 et sha1 se fissuré cependant? –
fissuré? .. si quelqu'un entre dans votre base de données, ils pourraient être en mesure de google quelques mots de passe déchiffrés, mais ils devraient entrer en premier droit? Séparer complètement le problème ... le hacher avant l'entrée SQL éliminera toute chance que le mot de passe lui-même soit utilisé pour l'injection SQL ou endommager votre site. – Fosco