在当今的数字环境中,数据加密是每个 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
嵌入式库使用原始的 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 应用程序中实现显着的性能改进。这意味着更快的响应时间、更少的服务器负载以及更安全的用户数据环境。尝试一下,亲自看看有何不同!
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3