jenssegers / optimus
基于Knuth整数哈希方法的ID混淆
v1.1.2
2024-03-12 11:56 UTC
Requires
- php: ^7.4||^8.0
- phpseclib/phpseclib: ^3.0
- symfony/console: ^5.0||^6.0||^7.0
Requires (Dev)
- phpunit/phpunit: ^9.5.10
Suggests
- ext-gmp: Required for 32bit systems
README
使用这个库,您可以基于Knuth的整数哈希将您的内部ID转换为混淆的整数。它与Hashids类似,但会生成整数而不是随机字符串。它也非常快。
安装
使用composer安装
composer require jenssegers/optimus
如果您将在32位系统上运行代码或将使用大素数,建议您安装GMP扩展。对于debian/ubuntu,您可以使用以下命令之一安装扩展
apt-get install php7.4-gmp apt-get install php8.0-gmp apt-get install php8.1-gmp
使用方法
要开始,您需要以下三个东西;
- 小于
2147483647
的大素数 - 逆素数,使得
(PRIME * INVERSE) & MAXID == 1
- 小于
2147483647
的大随机整数
幸运的是,我已经包含了一个控制台命令可以为您完成所有这些。要开始,只需运行以下命令
> php vendor/bin/optimus spark
Prime: 2123809381
Inverse: 1885413229
Random: 146808189
如果您希望选择自己的素数(例如从这个列表中选择),您可以将其传递给命令以计算剩余的数字
> php vendor/bin/optimus spark 1580030173
Prime: 1580030173
Inverse: 59260789
Random: 1163945558
使用这些数字,您可以开始创建 Optimus($prime, $inverted, $random)
实例
use Jenssegers\Optimus\Optimus; new Optimus(1580030173, 59260789, 1163945558);
注意:确保您在整个应用程序中始终使用相同的构造函数值!
编码和解码
要编码ID,请使用 encode
方法
$encoded = $optimus->encode(20); // 1535832388
要将结果 1535832388
解码回其原始值,请使用 decode
方法
$original = $optimus->decode(1535832388); // 20
框架集成
Laravel
这是一个示例服务提供程序,它为您的整个应用程序注册了一个共享的Optimus实例
<?php namespace App\Providers; use Jenssegers\Optimus\Optimus; use Illuminate\Support\ServiceProvider; class OptimusServiceProvider extends ServiceProvider { public function register() { $this->app->singleton(Optimus::class, function ($app) { return new Optimus(1580030173, 59260789, 1163945558); }); } }
一旦您创建了服务提供程序,请将其添加到 config/app.php
配置文件中的 providers 数组
App\Providers\OptimusServiceProvider::class,
Laravel的自动注入将在需要的地方传递此实例。例如控制器
<?php namespace App\Http\Controllers; use Jenssegers\Optimus\Optimus; use App\Http\Controllers\Controller; class UserController extends Controller { public function show($id, Optimus $optimus) { $id = $optimus->decode($id); } }
更多信息:https://laravel.net.cn/docs/5.3/container#resolving
第三方集成
- 由propaganistas/laravel-fakeid包提供的Laravel集成。
- 由cybercog/laravel-optimus包提供的支持多个连接的Laravel Optimus。
- 由jaam/silex-optimus-provider包提供的Silex 2集成。
- 由elfsundae/laravel-hashid包提供的Laravel集成。
- 由icanhazstring/optimus-middleware包提供的PSR-15中间件。
安全联系方式
要报告安全漏洞,请遵循这些步骤。
许可证
MIT许可证。