文字列 md5('somestring') があるとします。シンボル 0..f が含まれます。したがって、char(32) はそのハッシュを保存するのに問題ありませんが、21 バイト ([log 38/ log 236 + 1])*Length(hash) しかかからないと思います。シンボル0..fの文字列をシンボル0..9A..zの文字列に変換する高速関数はありますか? (数字とラテン文字のみを使用するため、21バイト以上かかります)?
2 に答える
2
ベター: 結果をバイナリでハッシュします。インデックスを使用すると、バイナリの実行がさらに高速になります。
mysql でフィールドを作成しますbin(16)。クエリは次のようになります。
SELECT * FROM `table` WHERE `field` = UNHEX('md5 hash')
PHP からこの関数を使用します (16 進数からビンへ)
function convert($hexString)
{
$hexLenght = strlen($hexString);
// only hex numbers is allowed
if ($hexLenght % 2 != 0 || preg_match("/[^\da-fA-F]/",$hexString)) return FALSE;
unset($binString);
for ($x = 1; $x <= $hexLenght/2; $x++)
{
$binString .= chr(hexdec(substr($hexString,2 * $x - 2,2)));
}
return $binString;
}
使用することもできます: http://php.net/manual/en/function.hex2bin.php
于 2011-11-29T09:25:22.307 に答える
0
2番目のパラメーターをtrueに設定します。
string md5 ( string $str [, bool $raw_output = false ] )
于 2011-11-29T09:16:36.870 に答える