7

有没有办法取任何数字,从 1 到 40000 并生成 8 个字符的哈希?

我正在考虑使用base_convert但无法想出一种方法将其强制为 8 个字符的哈希。

任何帮助,将不胜感激!

4

6 回答 6

23

为什么不直接运行md5并获取前 8 个字符?

因为您想要一个哈希,所以是否丢弃部分并不重要,而是相同的输入将产生相同的哈希。

$hash = substr(md5($num), 0, 8);
于 2010-03-26T02:22:52.970 回答
4
>>> math.exp(math.log(40000)/8)
3.7606030930863934

因此,您需要 4 个数字符号才能从 40000 生成 8 个字符的散列:

sprintf("%08s", base_convert($n, 10, 4))
于 2010-03-26T02:27:09.030 回答
1

对于 php:

$seed = 'JvKnrQWPsThuJteNQAuH';
$hash = sha1(uniqid($seed . mt_rand(), true));

# To get a shorter version of the hash, just use substr
$hash = substr($hash, 0, 10);

http://snipplr.com/view.php?codeview&id=20236

于 2012-06-12T12:29:30.400 回答
0

有很多方法...

一个例子

$x = ?
$s = '';
for ($i=0;$i<8;++$i)
{
    $s .= chr( $x%26 + ord('a') );
    $x /= 26;
}
于 2010-03-26T02:23:33.667 回答
0
$hash = substr(hash("sha256",$num), 0, 8);
于 2010-03-26T02:26:50.977 回答
0

所以你想将一个 6 位数字可重复地转换为一个 8 位字符串?

sprintf("%08d", $number);

当然,哈希是不可逆的——但如果没有盐/IV,它可能有点容易被破解。更好的解决方案可能是:

substr(sha1($number . $some_secret),0,8);

C。

于 2010-03-26T12:47:58.130 回答