有的时候我们的文章ID、用户ID等信息不想直接暴露在前端,则可以使用Hashids将int转化成唯一字符串,后端接受字符串信息后再解密成ID进行交互。

hashids的github网址: https://github.com/vinkla/laravel-hashids

1、使用composer安装Hashids

composer require vinkla/hashids

2、在config/app.php中的providers数组中添加

Vinkla\Hashids\HashidsServiceProvider::class

3、在config/app.php中的aliases数组中添加

'Hashids' => Vinkla\Hashids\Facades\Hashids::class

4、以config下生成hashids.php配置文件

php artisan vendor:publish

选择:Provider: Vinkla\Hashids\HashidsServiceProvider

5、修改hashids.php中的connections的盐值和加密输出长度

'connections' => [
        'main' => [
            'salt' => env('APP_KEY'),//可以随便输入你自己加密盐
            'length' => '10',//加密后字符串长度
        ],

        'alternative' => [
            'salt' => env('APP_KEY'),
            'length' => '10',
        ],
    ],

6、Hashids的加密解密使用方式

加密的使用方式

Hashids::encode(18);//返回经过加密后的字符串 7OWZR2Zla0

解密的使用方式 (注意:解密返回的是数组)

Hashids::decode('7OWZR2Zla0');//返回经过解密后的数组 [18]

同时加密多个参数

Hashids::encode(1,2,3);//5Z2Acws6pa

解密多个参数的加密字符串

Hashids::decode('5Z2Acws6pa')//返回经过解密后的数组[1,2,3]

切换不同的盐值和加密长度

我们可能需要对多个不同类型的id进行加密,盐值和返回长度也各有不同。所以config的hashids中的多个数组可以派上用场了。其中main数组是作为默认连接,可以自行添加其他的加密数组。

Hashids::encode(1);//使用默认main
Hashids::connection('alternative')->encode(1);////使用默认alternative

发表评论

您的电子邮箱地址不会被公开。