soden46 / garudacrypt
garudacrypt是一个用于数据加密的安装包,采用加密方法
Requires
- php: ^7.2||^8.0
- guzzlehttp/guzzle: ^7.0.1
- illuminate/filesystem: ^7||^8||^9
- illuminate/http: ^7||^8||^9
- illuminate/support: ^7||^8||^9
- illuminate/view: ^7||^8||^9
- phpunit/php-token-stream: ^4.0
- spatie/laravel-permission: ^5.5
Requires (Dev)
- php-http/client-integration-tests: ^3.0
- phpunit/phpunit: ^7.2|^8.0
This package is auto-updated.
Last update: 2024-09-19 15:58:11 UTC
README
使用此包,您可以在Laravel项目中加密和解密任何大小的文件。此包使用流和CBC加密,每次加密/解密一段数据。
安装和使用
此包需要PHP 8.0和Laravel 9.0或更高版本。
您可以通过composer安装此包
composer require soden46/garudacrypt
用法
教程
有关如何使用此包在Laravel中加密文件的详细说明,请参阅以下文章
描述
此包将自动注册一个名为GarudaCrypt
的facade。该GarudaCrypt
facade使用Laravel的Storage
,并将允许您指定一个disk
,就像您在处理Laravel Storage时通常做的那样。您将传递给包的加密/解密函数的所有文件名/路径相对于磁盘根目录。默认情况下使用local
磁盘,但您可以在每次调用GarudaCrypt
方法时指定不同的磁盘,或者通过发布此包的配置文件将默认磁盘设置为其他值。
如果您想更改默认的disk
或更改用于加密的key
/cipher
,您可以发布配置文件
php artisan vendor:publish --provider="Soden46\GarudaCrypt\GarudaCryptServiceProvider"
这是发布文件的 内容
return [ /* * The default key used for all file encryption / decryption * This package will look for a SHA256_KEY and GARUDA_CRYPT_KEY in your env file * If no SHA256_KEY and GARUDA_CRYPT_KEY is found, then it will use your Laravel APP_KEY */ 'key' => env('GARUDA_CRYPT_KEY', env('APP_KEY')), 'sha' => env('SHA256_KEY', env('APP_KEY')), /* * The cipher used for encryption. * Supported options are AES-128-CBC and AES-256-CBC */ 'cipher' => 'AES-256-CBC', /* * The Storage disk used by default to locate your files. */ 'disk' => 'local', ];
加密文件
encrypt
方法将搜索文件,加密它并将其保存在同一目录中,同时删除原始文件。
public function encrypt(string $sourceFile, string $destFile = null, $deleteSource = true)
encryptCopy
方法将搜索文件,加密它并将其保存在同一目录中,同时保留原始文件。
public function encryptCopy(string $sourceFile, string $destFile = null)
示例
以下示例将在local
磁盘上搜索file.txt
,将加密文件保存为file.txt.enc
并删除原始的file.txt
GarudaCrypt::encrypt('file.txt');
您也可以指定不同的disk
,就像您通常使用Laravel Storage
facade那样
GarudaCrypt::disk('s3')->encrypt('file.txt');
您还可以通过传入第二个参数指定加密文件的名称。以下示例将在local
磁盘上搜索file.txt
,将加密文件保存为encrypted.txt
并删除原始的file.txt
GarudaCrypt::encrypt('file.txt', 'encrypted.txt');
以下示例都达到上述相同的效果,唯一的区别是原始文件没有被删除
// save the encrypted copy to file.txt.enc GarudaCrypt::encryptCopy('file.txt'); // or save the encrypted copy with a different name GarudaCrypt::encryptCopy('file.txt', 'encrypted.txt');
解密文件
decrypt
方法将搜索文件,解密它并将其保存在同一目录中,同时删除加密文件。
public function decrypt(string $sourceFile, string $destFile = null, $deleteSource = true)
decryptCopy
方法将搜索文件,解密它并将其保存在同一目录中,同时保留加密文件。
public function decryptCopy(string $sourceFile, string $destFile = null)
示例
以下示例将在local
磁盘上搜索file.txt.enc
,将解密文件保存为file.txt
并删除加密文件file.txt.enc
GarudaCrypt::decrypt('file.txt.enc');
如果需要解密的文件不以.enc
扩展名结尾,则解密文件将具有.dec
扩展名。以下示例将在local
磁盘上搜索encrypted.txt
,将解密文件保存为encrypted.txt.dec
并删除加密文件encrypted.txt
GarudaCrypt::decrypt('encrypted.txt');
与加密一样,您也可以指定不同的disk
,就像您通常使用Laravel Storage
facade那样
GarudaCrypt::disk('s3')->decrypt('file.txt.enc');
您还可以通过传入第二个参数来指定解密文件的另一个名称。以下示例将在本地磁盘搜索encrypted.txt
,将解密文件保存为decrypted.txt
,并删除原始的encrypted.txt
。
GarudaCrypt::decrypt('encrypted.txt', 'decrypted.txt');
以下示例都实现了上述相同的结果,唯一的区别是原始(加密)文件不会被删除。
// save the decrypted copy to file.txt while preserving file.txt.enc GarudaCrypt::decryptCopy('file.txt.enc'); // or save the decrypted copy with a different name, while preserving the file.txt.enc GarudaCrypt::decryptCopy('file.txt.enc', 'decrypted.txt');
流式传输解密文件
有时您可能只想允许用户下载解密文件,但不需要存储实际的解密文件。为此,您可以使用streamDecrypt
函数,该函数将解密文件并将其写入php://output
流。您可以使用Laravel的streamDownload
方法(自5.6版起可用)来生成可下载的响应。
return response()->streamDownload(function () { GarudaCrypt::streamDecrypt('file.txt') }, 'laravel-readme.md');
为每个文件使用不同的密钥
您可能需要使用不同的密钥来加密您的文件。您可以使用key
方法显式指定用于加密的密钥。
GarudaCrypt::key($encryptionKey)->encrypt('file.txt');
请注意,对于AES-128-CBC
加密方式,加密密钥必须为16字节长,对于AES-256-CBC
加密方式,加密密钥必须为32字节长。
您可以使用generateKey
方法生成正确长度的密钥(根据配置文件中指定的加密方式而定)。
$encryptionKey = GarudaCrypt::generateKey();
测试
使用以下命令运行测试:
composer test
变更日志
有关最近更改的更多信息,请参阅变更日志。
贡献
有关详细信息,请参阅贡献指南。
安全
如果您发现任何安全相关的问题,请通过电子邮件syarifsoden22@gmail.com联系,而不是使用问题跟踪器。
鸣谢
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。