Я читаю код в этом page, где автор генерирует случайный токен. Я все понимаю, кроме как «строка 29», где он делит токен на куски и записывает их с помощью md5. Мои вопросы:Маленький фрагмент кода Пояснение
1) Почему он не сделал хэш весь токен, но разделил их и хэшировал их кусками?
2) Будет ли хэширование их в кусках доставлять те же результаты, что и хеширование неразделенного токена?
3) На «линии 36» он также делает некоторые подстроку, которые я думаю, может уменьшить количество символов. При этом хеш-маркер может быть восстановлен до оригинального непроверенного токена?
Вот самая важная часть кода ::
# Array indice friendly number of chars; empty token string
$numChars = count($chars) - 1; $token = '';
# Create random token at the specified length
for ($i=0; $i<$len; $i++)
$token .= $chars[ mt_rand(0, $numChars) ];
# Should token be run through md5?
if ($md5) {
# Number of 32 char chunks
$chunks = ceil(strlen($token)/32); $md5token = '';
# Run each chunk through md5
for ($i=1; $i<=$chunks; $i++)
$md5token .= md5(substr($token, $i * 32 - 32, 32));
# Trim the token
$token = substr($md5token, 0, $len);
} return $token;
}
Я надеюсь, что кто-то поможет мне получить немного понимания. Благодаря
EDIT
4) Почему он использовал 32 внутри функции SUBSTR()?
Почему бы вам не спросить его? – GordonM
Этот код предназначен для генерации случайных строк. Он хэшировал куски, а не все, потому что чувствовал это. Должно быть, он чувствовал, что это делает его более случайным. –
Где линия 26 и 33? Можете ли вы указать свои строки кода? –