2014-06-20 3 views
-1

Прошу прощения за плохое использование английского языка ... У меня возникла проблема с созданием функции, которая хэширует мой пароль с солью (первый раз с использованием соли). Проблема в том, что я не знаю, как реально вернуть соленый/хешированный пароль из функции.Хеш с солью в функции

Мой код:

# Password hashing with a salt. 
function hashing($stringPassword) 
{ 
    // Making a random uniq code as salt. 
    $salt = uniqid(mt_rand(), true); 

    $HASH512 = hash('SHA512', $stringPassword); 
    $hashPassword = $salt.$HASH512; 

    return $stringPassword; 
} 

И как я пытался проверить:

<?php 
$stringPassword = '482301'; 
hashing($stringPassword); 
echo $hashPassword; 
?> 

Благодарим Вас за помощь!

+0

Что ... что ты делаешь? Вы не возвращаете ничего полезного из своей функции, и вы вызываете функцию без сохранения ее вывода в переменную любого типа. Пожалуйста, начните с основного урока PHP. – ceejayoz

+0

Можете ли вы объяснить возникшую у вас проблему? Второй фрагмент кода должен содержать длинную строку символов - это не то, что вы ожидали? – Kryten

+0

@Kryten Второй фрагмент кода не должен содержать ничего, что на данный момент написано – ceejayoz

ответ

3

Ваш код обратный. Соль должна быть частью пароля ДО того, как вы ее используете. а затем вам нужно вернуть хешированный пароль и соль, чтобы позже вы могли выполнить соответствующие сравнения.

function hashing($cleartext) { 
    $salt = uniqid(mt_rand(), true); 
    $hash512 = hash('SHA512', $salt . $cleartext); 
    return(array('hash' => $hash512, 'salt' => $salt)); 
} 

$foo = hashing('letmein'); 
echo "Salt is: $foo[salt]"; 
+0

Спасибо! Это помогло мне и исправило это :-) – RezaM

1

Поскольку вы хеширования паролей , вы должны знать, что ША * алгоритмы не подходят для хеширования паролей. Они слишком быстрые, вместо этого вам нужна функция с таким коэффициентом затрат, как BCrypt или PBKDF2, где вы можете контролировать необходимое время для расчета.

PHP предлагает специальную функцию password_hash() для создания Bcrypt хэшей, для более ранних версий PHP вы можете использовать compatibility pack:

// Hash a new password for storing in the database. 
// The function automatically generates a cryptographically safe salt. 
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT); 

// Check if the hash of the entered login password, matches the stored hash. 
// The salt and the cost factor will be extracted from $existingHashFromDb. 
$isPasswordCorrect = password_verify($password, $existingHashFromDb); 
Смежные вопросы