PHP - 从整数生成8个字符的哈希

时间:2010-03-26 02:20:10

标签: php hash base-conversion

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

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

任何帮助将不胜感激!

6 个答案:

答案 0 :(得分:23)

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

因为你想要一个散列,所以丢弃部分并不重要,而是相同的输入会产生相同的散列。

$hash = substr(md5($num), 0, 8);

答案 1 :(得分:4)

>>> math.exp(math.log(40000)/8)
3.7606030930863934

因此,您需要4个数字符号才能从40000产生8个字符的哈希值:

sprintf("%08s", base_convert($n, 10, 4))

答案 2 :(得分: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

答案 3 :(得分:0)

有很多方法......

一个例子

$x = ?
$s = '';
for ($i=0;$i<8;++$i)
{
    $s .= chr( $x%26 + ord('a') );
    $x /= 26;
}

答案 4 :(得分:0)

$hash = substr(hash("sha256",$num), 0, 8);

答案 5 :(得分:0)

所以你想将6位数字转换成8位数字的字符串吗?

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

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

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

下进行。