」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 超越 AES — 使用 XChaCha20 對 Laravel 進行現代加密

超越 AES — 使用 XChaCha20 對 Laravel 進行現代加密

發佈於2024-11-08
瀏覽:677

Beyond AES — Modern Encryption for Laravel with XChaCha20

在當今的數位環境中,資料加密是每個 Web 應用程式的重要組成部分。本文探討了我為什麼開發一個利用 Libsodium 的 XChaCha20-Poly1305 加密功能的包,以及它如何增強 Laravel 應用程式的安全性,同時最大限度地減少開銷。

動機和要求

Laravel 的框架 Crypt Facade 為敏感資料的加密和解密提供了方便的接口,例如無狀態身份驗證令牌或服務間通訊框架。

預設框架的加密實作是基於透過 OpenSSL 的 AES-256-CBC,通常是安全的堅實基礎,但總有改進的空間,特別是在效能和可用性至關重要的情況下。

現代演算法和密碼

雖然透過 OpenSSL 的 AES-256-CBC 仍然被認為是安全的,但已經過時了。此外,它對 OpenSSL 的依賴可能會引入潛在的漏洞,具體取決於特定版本和配置。

從 PHP 7.2 開始,Sodium 擴充與 PHP Core 捆綁在一起。 Libsodium 優先考慮現代、經過嚴格審查的加密原語,例如 XChaCha20-Poly1305 和 Ed25519。雖然 AES 透過硬體加速可以很快,但 XChaCha20-Poly1305 作為軟體實現,在沒有特殊硬體指令的情況下優於它。

// Default AES-256-CBC Encrypter
$encrypter = new Illuminate\Encryption\Encrypter($key, 'aes-256-cbc');

$start = microtime(true);
$results = [];

for ($i = 0; $i encrypt(['user_id' => $i]);
}

$elapsed = microtime(true) - $start;
// 4.08 seconds
// Custom XChaCha20-Poly1305 Encrypter
$encrypter = new Blu3blaze\Encrypter\Encrypter($key);

$start = microtime(true);
$results = [];

for ($i = 0; $i encrypt(['user_id' => $i]);
}

$elapsed = microtime(true) - $start;
// 1.79 seconds

令牌長度的顯著優化

內建加密將密文、初始化向量和標籤值編碼為 JSON 物件的 Base64 表示形式,這顯著增加了令牌的長度。
切換到XChaCha20演算法無需編碼JSON,nonce可以作為二進位字串添加到密文中。

// Default AES-256-CBC Encrypter
$encrypter = new Illuminate\Encryption\Encrypter($key, 'aes-256-cbc');

$token = $encrypter->encrypt([
   'user_id' => '10296ab5-88b8-4dff-b7cf-2840b879e6dc'
]);
// 312 characters
// Custom XChaCha20-Poly1305 Encrypter
$encrypter = new Blu3blaze\Encrypter\Encrypter($key);

$token = $encrypter->encrypt([
   'user_id' => '10296ab5-88b8-4dff-b7cf-2840b879e6dc'
]);
// 139 characters

URL 中的 Base64 問題

嵌入式庫使用原始的 Base64 變體。因此,使用令牌作為 URL 的一部分或作為 GET 參數之一需要從 Base64 到 Base64URLSafe 的額外轉換。
立即在 Base64URLSafe 中對密文進行編碼沒有任何缺點,並且允許在任何環境中進行安全的令牌傳輸。

入門

1) 透過composer安裝套件

composer require blu3blaze/laravel-xchacha20-encrypter

2) 修改bootstrap/providers.php中的服務提供者清單

3) 使用 XChaCha20-Poly1305 演算法享受 Crypt 外觀

use Illuminate\Support\Facades\Crypt;

$token = Crypt::encrypt([
  'user_id' => '73d430f0-d39e-4642-a37e-9ef791b90d11'
]);

/* TAl1Sz4DTspE8ZzTOC6Q.....Ug5t4XcWqoiB6CWRak9Y */

$tokenData = Crypt::decrypt($token);

/* ['user_id' => '73d430f0-d39e-4642-a37e-9ef791b90d11'] */

結論

透過採用 blu3code/laravel-xchacha20-encrypter 套件,您可以利用現代加密演算法的優勢,並在 Laravel 應用程式中實現顯著的效能改進。這意味著更快的回應時間、更少的伺服器負載以及更安全的用戶資料環境。試試一下,親自看看有何不同!

版本聲明 本文轉載於:https://dev.to/blu3blaze/beyond-aes-modern-encryption-for-laravel-with-xchacha20-2d4g?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • SQL 中的反引號與單引號:主要區別是什麼以及何時應該使用它們?
    SQL 中的反引號與單引號:主要區別是什麼以及何時應該使用它們?
    SQL 查詢中的反引號與單引號在CodeIgniter 手冊摘錄中,提到$this->db->select ( ) 方法接受可選的第二個參數以停用欄位和表格名稱的反引號保護。這就提出了三個問題:1。反引號(`)和單引號(')有什麼不同? MySQL中反引號引用名稱,而單引號括住字串。使用不帶...
    程式設計 發佈於2024-11-08
  • 避免程式碼中的錯誤:Moment.js 中的變異方法與非變異方法
    避免程式碼中的錯誤:Moment.js 中的變異方法與非變異方法
    使用 Moment.js 時,必須了解哪些方法變更原始日期物件以及哪些方法傳回新值。這可以幫助您避免程式碼中出現意外的副作用。這是一個快速指南: ?改變原始日期物件的方法: startOf(unit) — 將日期設定為指定單位的開始日期(例如,「年」、「月」、「日」)。 endOf(unit) —...
    程式設計 發佈於2024-11-08
  • MLP-混合器(理論)
    MLP-混合器(理論)
    TL;DR - This is the first article I am writing to report on my journey studying the MPL-Mixer architecture. It will cover the basics up to an intermed...
    程式設計 發佈於2024-11-08
  • 為什麼需要類型保護?探索不同類型及其用例
    為什麼需要類型保護?探索不同類型及其用例
    為什麼需要型別保護?探索不同類型及其用例 在 TypeScript 中,類型保護在使程式碼庫更加可靠、對開發人員更友善方面發揮著重要作用。它們透過允許開發人員縮小類型來幫助確保類型安全,這有助於減少運行時錯誤並使程式碼更易於理解和維護。 什麼是型別保護? 類型保護是對類型執行運行時檢查的函數表達...
    程式設計 發佈於2024-11-08
  • 如何在 CSS 中將 Div 置中
    如何在 CSS 中將 Div 置中
    彈性盒: .container { display: flex; justify-content: center; align-items: center; height: 300px; } 網格 .container { display: gr...
    程式設計 發佈於2024-11-08
  • z-index如何控制網頁上的元素堆疊?
    z-index如何控制網頁上的元素堆疊?
    揭開z-index 的神秘面紗:綜合指南z-index 屬性在確定z-index 的堆疊順序方面起著關鍵作用網頁上的元素。然而,其複雜性可能會引起疑問。讓我們深入研究 z-index 的真正運作方式並解決一些關鍵查詢。 z-index 的功能每個網頁都包含一堆稱為堆疊上下文的元素。 z-Index ...
    程式設計 發佈於2024-11-08
  • Flex 專案是區塊級還是 Flex 級?深入研究 CSS 佈局
    Flex 專案是區塊級還是 Flex 級?深入研究 CSS 佈局
    Flex 專案令人困惑的本質:區塊級還是 Flex 等級? Flex 專案是否是區塊級的問題一直是CSS 開發者之間的爭論。 CSS 靈活框佈局模組等級 1 規定 Flex 項目位於 Flex 級別,而不是區塊級別。然而,後面的部分顯示彈性項目的顯示值是「塊化」的。這就提出了一個問題:Flex 專案...
    程式設計 發佈於2024-11-08
  • 如何在 PHP 中防止「通知:會話已啟動」?
    如何在 PHP 中防止「通知:會話已啟動」?
    避免通知:會話已經開始在PHP 中使用會話時,必須意識到以下潛在錯誤:如果會話在啟動後嘗試再次啟動,則會發生此情況。當程式碼中的會話管理不當時,可能會出現此錯誤「注意:會話已啟動 - 忽略 session_start()」。 為了避免此通知,檢查會話是否已啟動至關重要。在嘗試啟動新的之前已初始化。這...
    程式設計 發佈於2024-11-08
  • Python 3.3 中 Yield from Syntax 的實際應用和功能是什麼?
    Python 3.3 中 Yield from Syntax 的實際應用和功能是什麼?
    Yield From 語法在Python 3.3 中的實際應用建立透明的資料交換yield from 語法在呼叫者和被呼叫者之透明的資料交換yield from 語法在呼叫者和被呼叫者之透明的資料交換def reader(): "Simulates reading data fro...
    程式設計 發佈於2024-11-08
  • 在 Python 中使用標準化剪切 (NCut) 進行無監督影像分割的指南
    在 Python 中使用標準化剪切 (NCut) 進行無監督影像分割的指南
    介绍 图像分割在理解和分析视觉数据方面起着至关重要的作用,而归一化剪切(NCut)是一种广泛使用的基于图的分割方法。在本文中,我们将探索如何使用 Microsoft Research 的数据集在 Python 中应用 NCut 进行无监督图像分割,重点是使用超像素提高分割质量。 数...
    程式設計 發佈於2024-11-08
  • 如何在單一 FastAPI 端點中處理表單和 JSON 資料?
    如何在單一 FastAPI 端點中處理表單和 JSON 資料?
    如何建立可以接受表單或 JSON 正文的 FastAPI 端點? 在 FastAPI 中,您可以建立可以接受表單或 JSON 正文的端點使用不同的方法。以下是幾個選項:選項1:使用依賴函數此選項涉及建立一個依賴函數,該函數檢查Content-Type 請求標頭的值並使用Starlette 的方法解析...
    程式設計 發佈於2024-11-08
  • 什麼時候應該在 JavaScript 中使用非同步函數?
    什麼時候應該在 JavaScript 中使用非同步函數?
    JavaScript 中的非同步函數:理解「async」與「await」簡介在JavaScript 的非同步程式設計模型中,處理非同步任務及其完成回呼可能會導致複雜的程式碼結構。非同步函數與“async”和“await”關鍵字一起提供了一種更結構化和高效的方法。 非同步函數非同步函數是呼叫時不會阻塞...
    程式設計 發佈於2024-11-08
  • 艱難地學習 HTML 和 CSS(免費電子書)
    艱難地學習 HTML 和 CSS(免費電子書)
    如果您是前端開發人員,您正在使用 HTML 和 CSS。 然而,你可能不… ...記住所有 HTML 元素及其意義 …知道所有無效元素 ...了解所有具有可選開始或結束標籤的元素(並使用它來編寫 HTML–HTML) …了解元素類別 …了解所有 HTML 屬性 …清楚所有全域屬性 …知道哪些元素有...
    程式設計 發佈於2024-11-08
  • 群有什麼新鮮事
    群有什麼新鮮事
    Laravel Herd 1.11 剛剛發布,他們引入了一些我們期待已久的有趣功能。 以下是 Herd 1.11 的內容摘要: Forge 整合:輕鬆將本地站點連接到 Laravel Forge 並直接透過 Herd UI 或 CLI 進行部署。 Profiler:使用 herd profile...
    程式設計 發佈於2024-11-08
  • 如何使用 usort 和自訂比較函數按特定鍵對多維數組進行排序?
    如何使用 usort 和自訂比較函數按特定鍵對多維數組進行排序?
    按鍵將多維數組排序處理多維數組時的一個常見任務是需要根據特定鍵對它們進行排序。例如,考慮以下數組:Array ( [0] => Array ( [iid] => 1 [invitee] => 174 [nid] => 3...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3