laravel5.4使用Hashid加密id

Hashid介绍:
Laravel Hashid 整合了 Base62、Base64、Hashids、Hex、Optimus 等高性能编码算法,并提供了统一的、优雅的、简单易用的调用接口,将「敏感数据」混淆(编码)成可还原的、非连续的、URL 安全的标识符 (ID)

应用场景示例:
不希望对外暴露有规则的数据索引,比如用户 ID 、媒体资源 ID 、商品 ID 、订单号、注册码、优惠码等,防止爬虫侵扰。
重构现有的发码(ID 生成)机制:使用数据库自带的索引主键,但是对外进行混淆。
对加密串进一步混淆,并生成 URL 安全的字符串。
简单、统一的调用方法使用不同的编码算法、同一算法的不同编码参数、或自定义算法。

安装:

composer require elfsundae/laravel-hashid

如果安装失败可以添加–dev参数偿试:

composer require --dev elfsundae/laravel-hashid

对于 Lumen 或 Laravel 低于 5.5 版本,需要手动注册 service provider:

ElfSundae\Laravel\Hashid\HashidServiceProvider::class

发布配置文件:

// For Laravel application:
php artisan vendor:publish --tag=hashid

// For Lumen application:
cp vendor/elfsundae/laravel-hashid/config/hashid.php config/hashid.php

配置文件内容:

return [
    'default' => env('HASHID_CONNECTION', 'hashids_integer'),

    'connections' => [

        'hashids' => [
            'driver' => 'hashids',
            'salt' => env('HASHIDS_SALT', ''),
            'min_length' => env('HASHIDS_MIN_LENGTH', 0),
            'alphabet' => env('HASHIDS_ALPHABET', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'),
        ],

        'hashids_integer' => [
            'driver' => 'hashids_integer',
            'salt' => env('HASHIDS_INTEGER_SALT', ''),
            'min_length' => env('HASHIDS_INTEGER_MIN_LENGTH', 0),
            'alphabet' => env('HASHIDS_INTEGER_ALPHABET', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'),
        ],

        'hashids_hex' => [
            'driver' => 'hashids_hex',
            'salt' => env('HASHIDS_HEX_SALT', ''),
            'min_length' => env('HASHIDS_HEX_MIN_LENGTH', 0),
            'alphabet' => env('HASHIDS_HEX_ALPHABET', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'),
        ],

        'hashids_string' => [
            'driver' => 'hashids_string',
            'salt' => env('HASHIDS_STRING_SALT', ''),
            'min_length' => env('HASHIDS_STRING_MIN_LENGTH', 0),
            'alphabet' => env('HASHIDS_STRING_ALPHABET', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'),
        ],

        'optimus' => [
            'driver' => 'optimus',
            'prime' => env('OPTIMUS_PRIME'),
            'inverse' => env('OPTIMUS_INVERSE'),
            'random' => env('OPTIMUS_RANDOM', 0),
        ],

        'base62' => [
            'driver' => 'base62',
            'characters' => env('BASE62_CHARACTERS', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'),
        ],

        'base62_integer' => [
            'driver' => 'base62_integer',
            'characters' => env('BASE62_INTEGER_CHARACTERS', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'),
        ],

    ],

];

内置驱动:

  • Base62 : base62 , base62_integer
  • Base64 : base64 , base64_integer
  • Hashids : hashids , hashids_hex , hashids_integer , hashids_string
  • Hex : hex , hex_integer
  • Optimus : optimus

控制台命令:

  • 生成随机串 0-9a-zA-Z : 用来修改配置文件的随机字符串
php artisan hashid:alphabet

laravel5.4使用Hashid加密id_第1张图片

  • 生成 Optimus 编码要用到的参数
php artisan hashid:optimus

laravel5.4使用Hashid加密id_第2张图片
修改配置文件hashid.php中optimus数组:
laravel5.4使用Hashid加密id_第3张图片使用:

  • 使用 hashid_encode() 全局函数进行编码。
  • 使用 hashid_decode() 全局函数进行解码。

示例:

// 使用config/hasid.php配置文件的默认算法
hashid_encode(123456);  // "xkNDJ"
hashid_decode('xkNDJ'); // 123456

// hashids算法
hashid_encode(12334, 'hashids');       // bqGE
hashid_decode('bqGE', 'hashids');   // Array ( [0] => 12334 )

// base62算法
hashid_encode(123456, 'base62');        // "W7E"
hashid_encode('123456', 'base62');      // "FMJUCzH4"

// base62_integer算法
hashid_encode(123456, 'base62_integer');       // W7E
hashid_decode('W7E', 'base62_integer'); // 123456

重点介绍下纯数字算法optimus:

  • 首先需要初始化optimus数组的prime、inverse、random字段,上面已讲解;
  • 然后需要添加扩展php_gmp
    laravel5.4使用Hashid加密id_第4张图片

optimus示例:

hashid_encode(123456, 'optimus');       //928504901
hashid_decode(928504901, 'optimus');   // 123456

参考资料:https://laravelacademy.org/post/7973.html

你可能感兴趣的:(laravel,Laravel5.4,Hashid,生成混淆不一的id,防止文章被刷,防止文章被随意抓取)