3

我已经浏览了这个页面...

http://www.php.net/manual/en/function.hash.php

MD5 为 32 个字符,而 sha1 为 40。例如

$str = 'apple';

sha1 string d0be2dc421be4fcd0172e5afceea3970e2f3d940
md5 string 1f3870be274f6c49b3e31a0c6728957f

即使可选的 raw_output 设置为 TRUE,md5 摘要也会以长度为 16 的原始二进制格式返回。

我正在寻找一个将创建等于或小于 8 个字符的哈希的函数。

更新:我需要更小的字符串有 3 个原因:

1) MySQL Archive 表类型似乎不允许在超过 8 个字符的列上建立索引

2)我打算使用像redis这样喜欢较小键的键值实用程序

3) 安全性在这里不是问题。我正在散列“国家+电信+运营商”之类的列

4

3 回答 3

9

您可以使用该crc32方法创建散列,它创建一个 8 字符长的散列。

$hash = hash('crc32', $input, FALSE);

使用这种方法要格外小心,因为它完全暴露在密码攻击之下。不要其用于任何类型的安全检查。

于 2012-06-15T08:19:07.523 回答
0

留给我,我建议您创建自己的自定义“加密”算法,为您生成 8 个字符。例如,您甚至可以决定执行 md5、SHA1 和 SHA512,并以 2:3:3 的比例组合以获得您自己的自定义代码。

于 2012-06-15T08:26:19.683 回答
-3
function short_hash($value, $length=8) {
    return substr(md5($value), 0, $length);
}
于 2012-06-15T08:12:33.570 回答