krowinski/tinyid

缩短并混淆您的ID。

v2.0 2022-02-11 20:31 UTC

This package is auto-updated.

Last update: 2024-09-08 10:45:44 UTC


README

PHP Tests Latest Stable Version Total Downloads License Scrutinizer Code Quality Code Coverage

概要

    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)); // '😭😢😀😊😫😉'

兼容的替代品

示例在示例目录中。