假设我们有一个字符串 md5('somestring')。它将包含符号 0..f。因此,char(32) 可以保存该散列,但我相信它可能需要不超过 21 个字节 ([log 38/log 236 + 1])*Length(hash)。将带有符号 0..f 的字符串转换为带有符号 0..9A..z 的字符串的任何快速函数?(这将占用超过 21 个字节,因为它只使用数字和拉丁字母)?
问问题
375 次
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
于 2011-11-29T09:25:22.307 回答
0
将第二个参数设置为 true:
string md5 ( string $str [, bool $raw_output = false ] )
于 2011-11-29T09:16:36.870 回答