作成者がランダムトークンを生成しているこのページのコードを読んでいます。彼がトークンをチャンクに分割し、それらをmd5でハッシュする「29行目」以外はすべて理解しています。私の質問は::
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 を使用したのですか?