我正在阅读此页面中作者生成随机令牌的代码。我理解除了“第 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;
}
我希望有人能帮助我得到一点理解。谢谢
编辑
4) 为什么他在 substr() 函数中使用了 32?