sidus / encryption-bundle
EncryptionBundle 允许您以非常简单的方式将加密文件和数据存储在 Doctrine 实体中
Requires
- php: >=7.2
- ext-mbstring: *
- symfony/framework-bundle: >=2.8
Suggests
- ext-mcrypt: Don't use this except for backward compatibility purpose
- ext-sodium: The Sodium library is native in PHP 7.2
- doctrine/doctrine-bundle: Use Doctrine to encrypt and decrypt entities automatically
- paragonie/sodium_compat: Use this for a Sodium polyfill
- phpseclib/mcrypt_compat: If you need backward compatibility but don't want to compile the extension
This package is auto-updated.
Last update: 2024-09-19 23:54:08 UTC
README
为 Symfony2 提供简单的实体和文件加密。
我们希望能够在我们的 Symfony2 应用程序中存储加密数据,并意识到没有简单的方法来实现这一点。
在我们的解决方案中,恶意用户将很难从我们的服务器窃取数据。
- 数据不会被 SQL 注入或远程包含攻击所破坏。
- 如果没有用户连接,没有人可以解密数据,即使是 root 用户也不行。
- 只有来自同一组织的人可以相互分享数据。
想法是将密钥存储在数据库中的用户表中,但用用户的明文密码加密。这样,来自同一组织的每个用户都可以共享相同的密钥来加密和解密数据,但每个用户只能在登录时解密自己的加密密钥。
这个系统的主要弱点是密钥临时存储在 PHP 的会话中,然而,克服这个问题的唯一方法是在客户端和服务器之间使用相当复杂的非对称加密系统,这只能在富客户端中正确实现。
辅助工具
此包附带一个 EncryptionManager 类,可以用于独立加密和解密数据和文件。还有一个 DecryptFileResponse,允许您在解密文件的同时直接将其流式传输到客户端。
安装
您只需在 composer.json 中直接要求包 sidus/encryption-bundle
或通过命令行。
$ composer require sidus/encryption-bundle ~0.1.0
更新您的 AppKernel.php
public function registerBundles()
{
$bundles = array(
...
new Sidus\EncryptionBundle\SidusEncryptionBundle(),
);
...
}
实现接口
您应该在您的用户实体上实现 UserEncryptionProviderInterface,在将包含加密数据的每个实体上实现 CryptableInterface。
别忘了更新模型,加密密钥必须持久化到数据库!
配置
如果您需要在不同用户之间共享加密数据,则需要使用相同的密钥生成每个加密密钥,这可能相当棘手,尤其是如果用户已经有了账户和密码。
但是,如果每个用户都加密自己的数据,则可以在 config.yml 中使用自动加密密钥生成。
sidus_encryption:
encryption_key:
auto_generate: false
这将告诉系统如果用户没有,自动生成一个新的加密密钥。
在密码恢复的情况下,用户将无法检索任何加密数据,因为他将是唯一能够解密密钥的人。
Apache 许可证
@待办事项
作者
该包最初由 Vincent Chalnot 创建。