세션 해시에 사용할 올바른 알고리즘을 선택할 때 크기가 중요합니다.세션 해시가 중요합니까?
최근에 나는 article을 읽었으며 월풀을 사용하여 세션 ID에 대한 해시를 만드는 것이 좋습니다. 월풀은 128 문자 해시 문자열을 생성합니다. 너무 큽니까?
계획은 세션 해시를 db에 저장하는 것입니다. 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;
}
그녀가 당신에게 말한 것에 관계없이, 크기는 중요합니다! 심각하게도,이 모든 것들은 오늘날의 저장 매체에 비해 매우 작습니다. 세션 수가 많으면 (수백만) 더 긴 해쉬가 충돌을 덜 만듭니다. 그러나 그것은 이미 매우 큽니다. *, ** 매우 ** 어쨌든 가능성은 희박합니다. –
나는 그녀가 나를 응원하려하고 있다고 생각했지만, 나는 백만 세션을 처리 할 것으로 기대하지 않는다. 내 주요 관심사는 인덱싱과 DBMS가 이러한 큰 char 필드를 처리하는 방법입니다. – Andre