2016-11-29 3 views
1
function password_encrypt($password) { 
    $hash_format = "$2y$10$"; // Tells PHP to use Blowfish with a "cost" of 10 
    $salt_length = 22;  // Blowfish salts should be 22-characters or more 
    $salt = generate_salt($salt_length); 
    $format_and_salt = $hash_format . $salt; 
    $hash = crypt($password, $format_and_salt); 
    return $hash; 
} 

function generate_salt($length) { 
    // Not 100% unique, not 100% random, but good enough for a salt 
    // MD5 returns 32 characters 
    $unique_random_string = md5(uniqid(mt_rand(), true));  
    // Valid characters for a salt are [a-zA-Z0-9./] 
    $base64_string = base64_encode($unique_random_string);  
    // But not '+' which is valid in base64 encoding 
    $modified_base64_string = str_replace('+', '.', $base64_string);  
    // Truncate string to the correct length 
    $salt = substr($modified_base64_string, 0, $length); 
    return $salt; 
}  

Вы, ребята, это безопасно? Что можно было сделать по-другому? Что может быть проще в использовании для защиты пароля и хеширования?Вопросы безопасности паролей в PHP/MySQL

+2

'password_hash()' и 'password_verify()' делает трюк и просты в использовании и очень безопасны по сравнению с тем, что вы только что сделали. –

+0

@MasivuyeCokile Прост в использовании? Куда бы мне пришлось поместить его в свой код? или как бы вы его написали? :/ –

+0

' '>> –

ответ

3

Blowfish сам по себе действительно безопасен. Одно дело: не делайте слишком много хэширования и т. Д., Чтобы генерировать соль. Кроме того, почему бы не упростить и использовать password_hash?

http://php.net/manual/en/function.password-hash.php

Пример:

echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT)."\n"; 

И проверить пароль:

if (password_verify($password_nonhashed, $password_hashed)) { 

Вам не нужно хэш соли слишком много с Blowfish. Просто используйте sha1 хэш для соли, если вы действительно не хотите использовать password_hash.

Удачи вам!

+3

Опция salt для функции password_hash() устарела, поэтому что разработчики не генерируют свои собственные (обычно небезопасные) соли. Сама функция генерирует криптографически безопасную соль. –

+0

@MasivuyeCokile Спасибо, что указали это. –

Смежные вопросы