jenssegers/optimus

基于Knuth整数哈希方法的ID混淆

支持包维护!
jenssegers
Tidelift

安装次数: 3,211,010

依赖者: 27

推荐者: 2

安全性: 0

星星: 1,265

观察者: 27

分支: 73

公开问题: 14

v1.1.2 2024-03-12 11:56 UTC

This package is auto-updated.

Last update: 2024-09-15 09:27:23 UTC


README

Packagist Downloads Build Coverage

使用这个库,您可以基于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

第三方集成

安全联系方式

要报告安全漏洞,请遵循这些步骤

许可证

MIT许可证。