krowinski / tinyid
缩短并混淆您的ID。
v2.0
2022-02-11 20:31 UTC
Requires
- php: >=7.4
- ext-mbstring: *
- krowinski/bcmath-extended: ^6.0
Requires (Dev)
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-08 10:45:44 UTC
README
概要
use TinyID\TinyID; include __DIR__ . '/../vendor/autoload.php'; // dictionary must consist of at least two UNIQUE unicode characters. $tinyId = new TinyID('2BjLhRduC6Tb8Q5cEk9oxnFaWUDpOlGAgwYzNre7tI4yqPvXm0KSV1fJs3ZiHM'); var_dump($tinyId->encode('48888851145')); // will print 1FN7Ab var_dump($tinyId->decode('1FN7Ab')); // will print '48888851145'
描述
在各个地方(如GET链接或API负载)使用真实ID通常是个坏主意
- 它可能会暴露一些关于您的业务敏感信息,如增长率或客户数量。
- 如果有人发现未受保护的资源链接,您忘记检查传递的资源ID是否真的属于当前登录的用户,他只需通过增加链接中的ID就能快速窃取您所有的数据。
- 大数字可能在长度有限的地方(如短信)导致溢出。
借助本模块,您可以同时缩短并混淆您的ID。
方法
new TidyID('qwerty')
密钥必须至少由两个独特的Unicode字符组成。
字典越长,编码ID越短。
编码ID将仅由密钥中的字符组成。这个非常有用的属性允许您将编码适应到环境。例如,在短信中,您可以将密钥限制为US ASCII,以避免转换为GSM 03.38字符集而导致的长度减少。或者,如果您想在大小写不敏感的文件系统中使用此类ID作为文件/目录名,您可能只想在密钥中使用小写字母。
encode('123')
将正整数编码为字符串。
请注意,前导0
不被保留,encode('123')
与encode('00123')
相同。
使用的算法是一个基于密钥长度的基础,将映射到字符的不同排列。不要将其视为强大的加密,但如果您有一个秘密的、长且打乱顺序的密钥,几乎不可能反向工程出真实ID。
decode('rer')
将字符串解码回正整数。
技巧
如果您在密钥中提供连续的字符,可以将您的数字转换为一些奇怪的数字系统,例如base18。
var_dump((new TinyID('0123456789ABCDEFGH'))->encode('48888851145')); // '47F709HFF'
或者您可以为乐趣而疯狂。
var_dump((new TinyID('😀😁😂😃😄😅😆😇😈😉😊😋😌😍😎😏😐😑😒😓😔😕😖😗😘😙😚😛😜😝😞😟😠😡😢😣😤😥😦😧😨😩😪😫😬😭😮😯😰😱😲😳😴😵😶😷😸😹😺😻😼😽😾😿'))->encode(48888851145)); // '😭😢😀😊😫😉'
兼容的替代品
示例在示例目录中。