dmhendricks/hash-int

一个PHP类,用于从一个整数生成一个简短的哈希值。

1.0.0 2018-10-09 18:56 UTC

This package is auto-updated.

Last update: 2024-09-14 06:49:46 UTC


README

Release GitHub License Downloads DigitalOcean Twitter BrowserStack

整数哈希

一个PHP类,用于从一个整数生成一个指定长度的字母数字哈希值。

composer require dmhendricks/hash-int

需求

  • PHP 5.6或更高版本
  • BC Math: apt install php7.x-bcmath

用法

$num = 456;

/**
 * Create a 7-character hash from integer
 */
$hash = \CloudVerve\HashInt::hash( $num, 7 );

// Unhash the string
$unhashed = \CloudVerve\HashInt::unhash( $hash );

echo 'Hashed: ' . $hash . '<br />';
echo 'Unhashed: ' . $unhashed;

结果

Hashed: p3Wq1aC
Unhashed: 456

原始 作者 备注

释义 (来源)

我希望得到一个简短、独特、字母数字的哈希值,其序列难以推断。我可以使用md5生成它并剪掉前n个字符,但将截断的校验和存储在唯一字段中意味着,随着以62为底编码的整数的唯一键数量的几何增长,碰撞频率将呈指数增长。我宁愿做得正确,而不是创建一个定时炸弹。

基62

哈希值是以62为基的十进制整数。1=1,10=a,36=Z,61=z,62=10,72=1a,等等。

62, 3844, 238328, 14776336, 916132832, 56800235584, 3521614606208

1个字符 = 62种排列,2个字符 = 3844种排列,等等。

41, 2377, 147299, 9132313, 566201239, 35104476161, 2176477521929

41 = 62的黄金比例的下一位最高质数。

2377 = 3844的黄金比例的下一位最高质数。

唯一性

我选择使用质数来确保哈希的唯一性。任何大于62^n一半的质数都可以,但如果使用接近62^n或62^n/2或2*62^n/3等的质数,你将在环的某些点上检测到序列的线性。

随机外观

我选择接近黄金比例的质数来最大化随机外观。给定一小组哈希值(即使是关联的id),任何人猜测下一个哈希值都会很困难。

⚠️最小安全性技术

这是一个微小的旋转和基重新编码混淆算法,而不是加密算法。不要用它来加密敏感信息 - 使用它来混淆整数ID或创建简短的参考键(例如,用于短URL)。

特别感谢

Analytics