laravel下使用hashids加密id

在做二維碼兌獎時,發現如果將二維碼的參數暴露,那么惡意的用戶將可以利用參數套取獎品。
所以引發我對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");
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1.Laravel-Excel(Excel導入生成) github:Laravel-Excel 官網:Larave...
    王樂城愚人云端閱讀 1,476評論 0 2
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 概述 之前一直對加密相關的算法知之甚少,只知道類似DES、RSA等加密算法能對數據傳輸進行加密,且各種加密算法各有...
    Henryzhu閱讀 3,050評論 0 14
  • /**ios常見的幾種加密方法: 普通的加密方法是講密碼進行加密后保存到用戶偏好設置( [NSUserDefaul...
    彬至睢陽閱讀 3,001評論 0 7
  • 4:她買了一些東西,一面25元的鏡子,那真是太容易了!經過幾年的沮喪的嘗試之后,我最后發現了一些我擅長的事情。 5...
    Hangovar閱讀 164評論 0 0