假设我们有一个字符串md5('somestring')。它将包含符号0..f。因此,char(32)可以保存该哈希值,但我相信它可能不会超过21个字节([log 38 / log 236 + 1])* Length(hash)。任何快速函数将符号为0..f的字符串转换为符号为0..9A..z的字符串? (这将占用超过21个字节,因为它只使用数字和拉丁字母)?
答案 0 :(得分:2)
更好:将结果散列为二进制。使用索引,二进制文件运行速度更快,速度更快。
使用mysql创建一个字段bin(16)
。查询是这样的:
SELECT * FROM `table` WHERE `field` = UNHEX('md5 hash')
来自PHP使用此功能(十六进制到二进制)
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;
}
答案 1 :(得分:0)
将second parameter设为true:
string md5 ( string $str [, bool $raw_output = false ] )