资讯专栏INFORMATION COLUMN

优雅的 ID 混淆扩展包 Laravel Hashid

Cheriselalala / 2028人阅读

摘要:整合了等高性能编码算法,并提供了统一的优雅的简单易用的调用接口,将敏感数据混淆编码成可还原的非连续的安全的标识符。重构现有的发码生成机制使用数据库自带的索引主键,但是对外进行混淆。对加密串进一步混淆,并生成安全的字符串。

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

应用场景示例

不希望对外暴露有规则的数据索引,比如用户 ID 、媒体资源 ID 、商品 ID 、订单号、注册码、优惠码等,防止爬虫侵扰。

重构现有的发码(ID 生成)机制:使用数据库自带的索引主键,但是对外进行混淆。

对加密串进一步混淆,并生成 URL 安全的字符串。

简单、统一的调用方法使用不同的编码算法、同一算法的不同编码参数、或自定义算法。

项目主页

项目主页及详细文档: https://github.com/ElfSundae/...

新包求 Star 求反馈

安装
$ composer require elfsundae/laravel-hashid

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

ElfSundaeLaravelHashidHashidServiceProvider::class

发布配置文件:

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

# For Lumen application:
$ cp vendor/elfsundae/laravel-hashid/config/hashid.php config/hashid.php
配置

Hashid 的配置文件和 Laravel 框架的众多管理 (manager) 服务的配置极其类似,例如数据库、缓存、队列等。所以无需花费额外时间来学习如何配置它。

我们来看个例子:

"default" => "id",

"connections" => [

    "basic" => [
        "driver" => "base64",
    ],

    "hashids" => [
        "driver" => "hashids",
        "salt" => "sweet girl",
    ],

    "id" => [
        "driver" => "hashids_integer",
        "salt" => "My Application",
        "min_length" => 6,
        "alphabet" => "1234567890abcdef",
    ],

    "base62" => [
        "driver" => "base62",
        "characters" => "f9FkqDbzmn0QRru7PBVeGl5pU28LgIvYwSydK41sCO3htaicjZoWAJNxH6EMTX",
    ],

],
使用

使用 hashid() 全局函数获取 connection 或 driver 实例。

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

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

示例:

hashid_encode(123456);  // "xkNDJ"
hashid_decode("xkNDJ"); // 123456

hashid_encode(123456, "optimus");       // 1101845824
hashid_decode(1101845824, "optimus");   // 123456

hashid_encode(123456, "base62");        // "W7E"
hashid_encode("123456", "base62");      // "FMJUCzH4"
hashid_decode("W7E", "base62_integer"); // 123456
内置驱动

[Base62] : base62 , base62_integer

[Base64] : base64 , base64_integer

[Hashids] : hashids , hashids_hex , hashids_integer , hashids_string

[Hex] : hex , hex_integer

[Optimus] : optimus

控制台命令

hashid:alphabet :生成随机串 0-9a-zA-Z

hashid:optimus :生成 [Optimus] 编码要用到的参数

自定义驱动

要使用自己的编解码算法,只需要创建一个类实现 ElfSundaeLaravelHashidDriverInterface 接口即可,这个接口只有两个方法: encodedecode 。初始化方法可选接收一个名为 $config 的配置参数,同时也支持类型提示式依赖注入。

例如:

encrypter = $encrypter;

        $this->serialize = $config["serialize"] ?? false;
    }

    public function encode($data)
    {
        return $this->encrypter->encrypt($data, $this->serialize);
    }

    public function decode($data)
    {
        return $this->encrypter->decrypt($data, $this->serialize);
    }
}

要使用这个自定义驱动,在配置文件中指定它即可:

"connections" => [

    "custom" => [
        "driver" => AppHashidCustomDriver::class,
        "serialize" => false,
    ],

    // ...
]

调用示例:

hashid_encode(123456, "custom");

如果想为自定义驱动使用一个短名字,注册一个容器绑定即可:

$this->app->bind("hashid.driver.custom", CustomDriver::class);

更多使用方法请参考项目主页:https://github.com/ElfSundae/...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26052.html

相关文章

  • Laravel 模型间关系设置分表方法

    摘要:如这个很简单,那么在模型间关系比如,等使用这种方式的情况下,如何设置分表呢找了半天没找到好的办法,以为例,只好复制类中的方法,改成,并传入表名,并且在函数里对象实例化后调用,果然可以。 在实际开发中经常用到分库分表,比如用户表分成 100 张,那么这个时候查询数据需要设置分表,比如 Laravel 的 Model 类中提供了 setTable 方法: /** * Set the ta...

    syoya 评论0 收藏0
  • laravel package收集

    摘要:查找保存下载用搭建自己的缓存仓库权限管理的好选择基于封装的后台管理系统,支持手机和端访问支付宝风格的验证器后台系统微信接口的部署脚本开发的博客系统百度推送自动记录用户行为扩展一个项目管理系统根据生成对应导航的状态 1.debug https://github.com/barryvdh/l... showImg(https://segmentfault.com/img/bVmhWL); ...

    psychola 评论0 收藏0
  • Laravel一个后期静态绑定

    摘要:实验一个抽象类,有个方法,通过延迟静态绑定实例化并返回。这里如果把注释打开,打印的就是重写的值如果把抽象类改成普通类,改成的方式实例化,结果就不同了,打印的属性都是各自类的属性。 (原文地址,内容以原文为准,可能修改或者补充:https://blog.tanteng.me/2017/...) 关于 PHP 的 new static 延迟静态绑定,或者叫后期静态绑定,在 Laravel...

    30e8336b8229 评论0 收藏0
  • 优雅 Oss Flysystem 扩展

    摘要:先上链接如果觉得帮助了你,节省了你的时间记得哟用户直接用这个序言之前用过很多扩展包但是暂时没有一个用的顺心的,一些扩展包配置太复杂,还有的扩展包不能集成文件驱动,对于喜欢优雅编码的同学可能不能忍受最近闲下来看了一些优秀的开源项目,从中 showImg(https://iocaffcdn.phphub.org/uploads/images/201812/30/4430/zcyZkSQgZ...

    Yumenokanata 评论0 收藏0
  • Laravel 生成 Gravatar 头像地址优雅姿势

    摘要:扩展包提供了最简单优雅的方式来生成全球公认头像地址。配置示例只有一个全局帮助函数使用示例为生成头像地址,使用连接配置为的哈希值生成头像地址,使用连接配置使用连接配置使用连接配置,并覆盖参数为使用连接配置,并覆盖参数为或者 Laravel Gravatar 扩展包提供了最简单优雅的方式来生成 Gravatar 全球公认头像地址。灵活方便的 API ,支持多连接配置,支持镜像地址。 项目主...

    rubyshen 评论0 收藏0

发表评论

0条评论

Cheriselalala

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<