spaze / encryption
各种加密助手,使用 Halite(它使用 Sodium)进行加密
Requires
- php: ^8.2
- paragonie/halite: ^5.0
- paragonie/hidden-string: ^2.0
Requires (Dev)
- nette/tester: ^2.5
- php-parallel-lint/php-console-highlighter: ^1.0
- php-parallel-lint/php-parallel-lint: ^1.2
- phpstan/phpstan: ^1.10
- spaze/coding-standard: ^1.7
README
各种加密助手,使用 paragonie/halite
(它使用 Sodium)进行加密。支持密钥轮换。
Nette 框架中的使用
尽管可以在任何地方使用,但这个库不依赖于 Nette 框架的任何东西。
定义加密密钥
将此(或类似内容)添加到您的 config.local.neon
参数部分(请勿将此提交到仓库)
encryption:
keys:
passwordHash:
prod1: "phek_abadcafec15c..." # prefix _ [0-9A-F]{64}
email:
prod1: "eek_cafebabe25da..." # prefix _ [0-9A-F]{64}
activeKeyIds:
passwordHash: prod1
email: prod1
prefixes:
passwordHash: phek # password hash encryption key
email: eek # email encryption key
您必须生成自己的密钥。例如,您可以使用
bin2hex(random_bytes(32))
来生成密钥,然后添加前缀。每个组中可以有多个密钥(这里我们看到两个组:password
和 email
),这意味着您将能够解密使用这些密钥加密的数据。数据将始终使用 activeKeyIds
部分中定义的内容进行加密。
此配置是一个示例,您不需要使用组,甚至配置密钥名称(如 activeKeyIds
),这些名称的唯一用途是在定义服务或服务时。
服务
然后为每个密钥组定义服务(您可以自由提交此内容)
services:
emailEncryption: \Spaze\Encryption\SymmetricKeyEncryption(%encryption.keys.passwordHash%, %encryption.activeKeyIds.passwordHash%, %encryption.prefixes.passwordHash%)
passwordHashEncryption: \Spaze\Encryption\SymmetricKeyEncryption(%encryption.keys.email%, %encryption.activeKeyIds.email%, %encryption.prefixes.email%)
在这个类中使用这些服务,该类需要加密和解密电子邮件地址,无论出于何种原因
use Spaze\Encryption\SymmetricKeyEncryption; class Something { public function __construct( private SymmetricKeyEncryption $emailEncryption, ) { // ... } public function doSomething() { // ... $encryptedEmail = $this->emailEncryption->encrypt($email); // ... } public function doSomethingElse() { // ... $decryptedEmail = $this->emailEncryption->decrypt($email); // ... } }
传递正确配置的加密服务到该类
services:
something: Something(emailEncryption: @emailEncryption)
密钥轮换
您始终可以添加新的加密密钥,将其设置为活动密钥,从那一刻起,数据将使用新密钥进行加密。除非您删除旧密钥,否则将能够使用它解密加密的数据。然后,您可以重新加密使用旧密钥加密的所有数据,仅为了更改用于加密它们的密钥。完成后,您可以删除旧密钥。
您可以使用 needsReEncrypt($ciphertext): bool
来查看数据是否使用非活动密钥加密,因此应该使用当前活动密钥进行重新加密。
运行测试
如果您想做出贡献(太棒了,谢谢!),您应该为您的贡献添加/运行测试。首先通过运行 composer install
安装开发依赖项,然后使用 composer test
运行测试,请参阅 composer.json
中的 scripts
。测试还将在每次推送时通过 GitHub 的 Actions 运行。
您可以通过运行 composer cs-fix
自动修复编码风格问题。