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'),
],
],
];
内置驱动:
控制台命令:
php artisan hashid:alphabet
php artisan hashid:optimus
修改配置文件hashid.php中optimus数组:
使用:
示例:
// 使用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示例:
hashid_encode(123456, 'optimus'); //928504901
hashid_decode(928504901, 'optimus'); // 123456
参考资料:https://laravelacademy.org/post/7973.html