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

发布于 2024-08-26 10:05:14 字数 133 浏览 9 评论 0原文

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

我正在考虑使用 base_convert 但无法找到一种方法来强制它成为 8 个字符的哈希值。

任何帮助将不胜感激!

Is there a way to take any number, from say, 1 to 40000 and generate an 8 character hash?

I was thinking of using base_convert but couldn't figure out a way to force it to be an 8 character hash.

Any help would be appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

遇见了你 2024-09-02 10:05:14

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

因为您需要一个散列,所以部分是否被丢弃并不重要,重要的是相同的输入将产生相同的散列。

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

Why don't you just run md5 and take the first 8 characters?

Because you are wanting a hash, it doesn't matter whether portions are discarded, but rather that the same input will produce the same hash.

$hash = substr(md5($num), 0, 8);
假扮的天使 2024-09-02 10:05:14
>>> math.exp(math.log(40000)/8)
3.7606030930863934

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

sprintf("%08s", base_convert($n, 10, 4))
>>> math.exp(math.log(40000)/8)
3.7606030930863934

Therefore you need 4 digit-symbols to produce a 8-character hash from 40000:

sprintf("%08s", base_convert($n, 10, 4))
第几種人 2024-09-02 10:05:14

从 PHP 8.1 开始,您可以使用 xxHash 获取任何字符串或数字变量的 8 个字符的哈希值。

$number = random_int(1, 40_000);
$hash = hash('xxh32', (string) $number);

var_dump($hash); // Output is string(8) "af863d37"

As of PHP 8.1 you can use xxHash to get 8 characters hash of any string or number variable.

$number = random_int(1, 40_000);
$hash = hash('xxh32', (string) $number);

var_dump($hash); // Output is string(8) "af863d37"
撩起发的微风 2024-09-02 10:05:14

对于 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< /a>

For 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

半﹌身腐败 2024-09-02 10:05:14

有很多方法......

一个例子

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

there are many ways ...

one example

$x = ?
$s = '';
for ($i=0;$i<8;++$i)
{
    $s .= chr( $x%26 + ord('a') );
    $x /= 26;
}
如痴如狂 2024-09-02 10:05:14
$hash = substr(hash("sha256",$num), 0, 8);
$hash = substr(hash("sha256",$num), 0, 8);
无尽的现实 2024-09-02 10:05:14

那么您想将 6 位数字可重复地转换为 8 位数字字符串吗?

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

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

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

C.

So you want to convert a 6 digit number into a 8 digit string reproducibly?

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

Certainly a hash is not reversible - but without a salt / IV it might be a bit easy to hack. A better solution might be:

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

C.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文