Имеет ли значение размер при выборе правильного алгоритма для использования в хеше сеанса.
Я недавно прочитал эту статью , и она предложила использовать Whirlpool для создания хэша для идентификатора сеанса.Whirlpool генерирует хэш-строку длиной 128 символов, это слишком велико?
Планируется сохранить хэш сессии в БД.Есть ли большая разница между использованием 64-символьного поля (sha256), 96-символьного поля (sha384) или 128-символьного поля (джакузи)?Одним из первоначальных аргументов в пользу водоворота была скорость по сравнению с другими алгоритмами, но, глядя на результаты скорости, sha384 выглядит не слишком плохо.
Существует опция усечения хэша, чтобы он был меньше 128 символов.
Я изменил исходный фрагмент кода, чтобы разрешить изменение алгоритма в зависимости от потребностей.
Обновление : обсуждалось хеширование строк, поэтому я 'мы включили код.
function generateUniqueId($maxLength = null) {
$entropy = '';
// try ssl first
if (function_exists('openssl_random_pseudo_bytes')) {
$entropy = openssl_random_pseudo_bytes(64, $strong);
// skip ssl since it wasn't using the strong algo
if($strong !== true) {
$entropy = '';
}
}
// add some basic mt_rand/uniqid combo
$entropy .= uniqid(mt_rand(), true);
// try to read from the windows RNG
if (class_exists('COM')) {
try {
$com = new COM('CAPICOM.Utilities.1');
$entropy .= base64_decode($com->GetRandom(64, 0));
} catch (Exception $ex) {
}
}
// try to read from the unix RNG
if (is_readable('/dev/urandom')) {
$h = fopen('/dev/urandom', 'rb');
$entropy .= fread($h, 64);
fclose($h);
}
// create hash
$hash = hash('whirlpool', $entropy);
// truncate hash if max length imposed
if ($maxLength) {
return substr($hash, 0, $maxLength);
}
return $hash;
}