dmhendricks / hash-int
一个PHP类,用于从一个整数生成一个简短的哈希值。
1.0.0
2018-10-09 18:56 UTC
Requires
- php: >=4.0.4
This package is auto-updated.
Last update: 2024-09-14 06:49:46 UTC
README
整数哈希
一个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)。