tigr / laravel-compact-encrypter
为Laravel提供的加密器,输出更短
1.0.3
2023-05-31 16:15 UTC
Requires
- php: ^7.0|^8.0
- ext-json: *
- ext-openssl: *
- illuminate/contracts: *
- tigr/compact-encrypter: *
Requires (Dev)
- illuminate/encryption: *
- phpunit/phpunit: ^8.1
This package is auto-updated.
Last update: 2024-08-30 01:28:52 UTC
README
这是一个Laravel加密器的直接替换品,它可以生成更简洁且URL安全的输出,并支持旧格式加密数据。适用于Laravel 5.5及以上版本。
安装
composer require tigr/laravel-compact-encrypter
然后Laravel应该会自动注册我们的服务提供者。
为什么?
当谈到空间使用效率时,Laravel的加密器非常低效。它将64字节的原始加密数据转换为192个字符。如何做到的?
Laravel以base64编码的JSON形式存储加密数据,其中包含base64和HEX字符串。所以是 base64_encode(json_encode(base64_encode(data) + sha256 hex hash))
。只需比较简单字符串“hello”的加密即可。
# Laravel Encrypter: 192 characters long
$ artisan tinker
>>> Crypt::encryptString('hello')
=> "eyJpdiI6IlZRZFY5TVZiZVdNSlg3RVdDYTNDbHc9PSIsInZhbHVlIjoiNk9rXC9oV3hZaWEzNE95SU5xMUVHUWc9PSIsIm1hYyI6ImIyZDQ1MTdiODlhMzU1ZjQ1NmU3N2ZlN2I4OGU0Yzc2MjIyZDBkMzAwMGViNjM2OTFlMTZkOGY4MDFjYTg1NDIifQ=="
# add Compact Encrypter
$ composer require tigr/laravel-compact-encrypter
# Compact Encrypter: 70 characters long
$ artisan tinker
>>> Crypt::encryptString('hello')
=> "ABvcrldH1QNn8AgEL_LY-E_Cj04MRWPn3M-kSuvf3DAjzsNfFqC_lUml6iqGkRTjlox2kA"
# Compact Encrypter dropping verification hash: 53 characters long
>>> Crypt::encryptString('hello', false)
=> "z4zztewR8vQ7QId_P6diDRW2DvVPhwf4xh8gNss4G1o"
谁会在乎?
首先,如果你有加密的cookie,你可能会很容易遇到来自服务器或中间的负载均衡/DDoS保护代理的“header too long”的400错误。平均而言,Compact Encrypter生成的输出更紧凑,提高了25-275%,如果去掉哈希,甚至可以提高360%。
其次,你可能想在URL中使用自包含的令牌(无需令牌数据库),但你知道吗,192个字符,其中一些是URL转义过的,看起来非常丑陋。
它是如何工作的?
- 没有中间的base64或hex编码,所有数据都是原始二进制。
- 没有JSON,使用pack()/unpack()。
- 使用URL安全的base64版本(删除尾随'=',将'/+'替换为'-_')。
- 对于哈希,使用SHA1而不是SHA256。我知道,我知道,但对于实际应用目的,SHA1仍然足够好。
- 如果需要,允许丢弃Mac(验证哈希)。
- 并提供在遇到用Laravel Encryptor加密的数据时的回退解密。