rpHash


rpHash — Хеширование с солью, случайными алгоритмами и заданным количеством раундов

Описание

array rpHash( string $pass [, string $algos = '' [, string $salt = '' [, int $steps = 65536 ] ] ] )

Хеширование с солью, случайными алгоритмами и заданным количеством раундов. Против перебора по словарям и радужным таблицам.

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

Время работы этой функции зависит от количества раундов steps и аппаратных возможностей. Для steps равного 65536 время работы может варьироваться от 200мс до 1с, что значительно затрудняет прямой перебор пароля. В случае утечки БД с хешами нет возможности произвести подбор паролей с использованием радужных таблиц, т.к. каждый хеш генерируется по своему алгоритму с использованием своей соли. Недостатком является то, что в БД необходимо хранить не только сам хеш, а еще и соль и алгоритмы.

Список параметров

pass
Строка для хеширования
algos
Строка с перечислением алгоритмов для хеширования. По-умолчанию "md2,md4,md5,sha1,sha224,sha256,sha384,sha512,ripemd128,ripemd160,ripemd256,whirlpool"
salt
Соль. Если не задана, то генерируется строка из случайных символов
steps
Количество раундов. Чем больше количество раундов, тем сложнее осуществить подбор пароля зная хеш.

Примеры

Пример 1: Начальная генерация хеша

<?php

debug_var(rpHash("123"));

/*
Array
(
    [key] => 74f3cb506423a9858884f6c3c3a1f95c
    [algos] => sha384,md4,sha224,ripemd256,sha1,ripemd160,md5,ripemd128,md2,whirlpool,sha512,sha256
    [salt] => nAaLFfDKDODr8nEnB2BLFLpy9484MXHS
    [steps] => 65536
)
*/

?>

Пример 2: Генерация хеша для проверки

<?php

$debug_code_time = microtime(1);

$pass = "123";
$algos = "sha384,md4,sha224,ripemd256,sha1,ripemd160,md5,ripemd128,md2,whirlpool,sha512,sha256";
$salt = "nAaLFfDKDODr8nEnB2BLFLpy9484MXHS";

debug_var( rpHash($pass, $algos, $salt) ); // Генерируем хеш с известными параметрами

debug_var( showtime(microtime(1) - $debug_code_time) );

/*
Array
(
    [key] => 74f3cb506423a9858884f6c3c3a1f95c
    [algos] => sha384,md4,sha224,ripemd256,sha1,ripemd160,md5,ripemd128,md2,whirlpool,sha512,sha256
    [salt] => nAaLFfDKDODr8nEnB2BLFLpy9484MXHS
    [steps] => 65536
)

461,64 msec
*/
?>

Смотрите также:

  • hash — Если на хостинге отключено расширение hash
  • hash_equals — Сравнивает хеш-строки с защитой от атаки по времени для php < 5.6