Bir oturum karma için kullanmak doğru algoritma seçerken boyutu önemi var.
Geçenlerde bu article okumak ve oturum kimliği için bir karma oluşturmak için jakuzi kullanarak önerdi. Whirlpool 128 karakter karma dize üretir, bu çok büyük?
Plan bir db olarak oturum karma saklamaktır. Belki 64 karakter alanı (sha256), 96 karakter alanı (SHA384) veya 128 karakter alanı (jakuzi) ile arasında pek bir fark var mı? Girdap için yapılan ilk argümanlardan biri diğer algoritmaları hız vs oldu ama hız sonuçları SHA384 bakarak çok kötü adil değil.
128 karakterden fazla yapmak için daha küçük karma kesecek seçenek var.
Ben ihtiyaçları tabanlı algoritma değişen izin vermek, özgün kod pasajını değişiklik yaptım.
Update: İşte dize karma olma konusunda bazı tartışmalar oldu, bu yüzden ben kodu dahil ettik.
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;
}