Это безопасный метод для генерации токена?

Я не хочу генерировать токен для проверки электронной почты пользователей, я узнаю об универсальном hashing (случайным образом выбирая хеш-функцию из семейства хеш-функций), и я написал этот код в PHP

Это безопасный метод для генерации токена?

$string ='';
$length = 60;
$pattern = 'abcdefghijklmnpqrstuvwxyABCDEFGHIJKLMNPQRSTUVWXY0123456789';
$hashList = array('sha256','sha384','sha512','ripemd256','ripemd320','openssl_random_pseudo_bytes');
$randNumber = mt_rand(0, 6);

for($i=0; $i<$length; $i++)
{
    $string .= $pattern[rand()%strlen($pattern)];
}

switch ($randNumber) {

    case 0:
    return substr(hash($hashList[$randNumber],$string),0,$length);    
    break;

    case 1:
    return substr(hash($hashList[$randNumber],$string),0,$length);
    break;

    case 2:
    return substr(hash($hashList[$randNumber],$string),0,$length);
    break;

    case 3:
    return substr(hash($hashList[$randNumber],$string),0,$length);
    break;

    case 4:
    return substr(hash($hashList[$randNumber],$string),0,$length);
    break;

    case 5:
    return substr(bin2hex($hashList[$randNumber]($length)),0,$length);
    break;

    default:
    return $string;
    break;

}

1 ответ

Решение

Мне кажется, это немного сложно, проверка электронной почты пользователей, возможно, не самая важная вещь для защиты, генерация хеша через эту функцию. Вряд ли угадать значение хеша.

Я бы выбрал только одну хеш-функцию, а не просто создавал хеш-значение из имени пользователя, значений электронной почты, добавлял соль или случайные вещи в строку. Следующая опция будет контролировать, сколько недействительных проверок было обработано, и просто заблокировать пользователя для проверки в течение некоторого периода.

Другие вопросы по тегам