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 使用这个函数(十六进制到 bin)

    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

第二个参数设置为 true:

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