美文网首页Laravel开发实践
laravel下使用hashids加密id

laravel下使用hashids加密id

作者: 王乐城愚人云端 | 来源:发表于2017-07-08 21:39 被阅读1401次
    在做二维码兑奖时,发现如果将二维码的参数暴露,那么恶意的用户将可以利用参数套取奖品。
    所以引发我对hashids的使用需求。当然hashids的使用场景和范围其实很大。例如对视频图片
    等资源进行进行id加密,防止被第三方直接遍历抓取资源。生成指定位数的不重复的用户的推荐码等。
    

    hashids的github网址:

    https://github.com/vinkla/laravel-hashids
    

    1.在laravel中安装hashids

    composer require vinkla/hashids
    

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

    Vinkla\Hashids\HashidsServiceProvider::class
    

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

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

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

    php artisan vendor:publish
    

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

    其中盐值可以是任意长度任意字符的字符串,加密和盐值有直接的关系,盐值是解密的钥匙。我直接取项目的密钥作为其盐值,以让项目统一,且不同项目的加密结果不一样。

    'connections' => [
            'main' => [
                'salt' => env('APP_KEY'),
                'length' => '16',
            ],
            'alternative' => [
                'salt' => env('APP_KEY'),
                'length' => '6',
            ],
            'recommend' => [
                'salt' => env('APP_KEY'),
                'length' => '6',
            ],
        ],
    

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

    • 加密的使用方式
    Hashids::encode(123);//返回经过加密后的字符串a9M4pPZqO0rJ6QWK
    
    • 解密的使用方式
      注意返回值是数组
    Hashids::decode('a9M4pPZqO0rJ6QWK');//返回经过解密后的数组[123]
    
    • 同时加密多个参数
    Hashids::encode(1,2,3);//M0BKxg8cYSNrVAjp
    
    • 解密多个参数的加密字符串
    Hashids::decode('M0BKxg8cYSNrVAjp')//返回经过解密后的数组[1,2,3]
    
    • 切换不同的盐值和加密长度
      我们可能需要对多个不同类型的id进行加密,盐值和返回长度也各有不同。所以config的hashids中的多个数组可以派上用场了。其中main数组是作为默认连接,可以自行添加其他的加密数组。
    Hashids::connection('recommend')->encode(1);
    Hashids::connection('recommend')->decode("jflkasdjfkasdjfl");
    

    来自作者的小留言

    • 本文原创,允许任意转载,但请按以下格式转载
      转载自简书-王乐城愚人云端:+【本文链接】
    • 我的小博客:愚人云端

    相关文章

      网友评论

        本文标题:laravel下使用hashids加密id

        本文链接:https://www.haomeiwen.com/subject/gckjhxtx.html