0

文字列 md5('somestring') があるとします。シンボル 0..f が含まれます。したがって、char(32) はそのハッシュを保存するのに問題ありませんが、21 バイト ([log 38/ log 236 + 1])*Length(hash) しかかからないと思います。シンボル0..fの文字列をシンボル0..9A..zの文字列に変換する高速関数はありますか? (数字とラテン文字のみを使用するため、21バイト以上かかります)?

4

2 に答える 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

http://php.net/manual/en/function.bin2hex.php

于 2011-11-29T09:25:22.307 に答える
0

2番目のパラメーターをtrueに設定します。

string md5 ( string $str [, bool $raw_output = false ] )
于 2011-11-29T09:16:36.870 に答える