maymeow / cryptography
Requires
- php: 8.0.*
- ext-openssl: *
Requires (Dev)
- phpstan/phpstan: ^0.12.99
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.6
This package is auto-updated.
Last update: 2024-09-04 13:51:29 UTC
README
用于以对称和不对称方式加密和解密数据的加密库。
此包替代了 https://github.com/MayMeow/php-encrypt
要求
- PHP 8.*
- openssl 扩展
包含内容
- AES 加密服务提供商(加密、解密字符串)
- RSA 加密服务提供商
- 密钥推导
开发
此项目包含开发容器。要开始开发,请构建容器
docker-compose -f docker-compose.dev.yml build
该容器以用户 vscode 和 uid 1000 运行。启动容器
docker-compose -f docker-compose.dev.yml run --rm dev-container sh
或者它可以作为 PHPStorm 中远程 PHP 处理器的配置使用。
用法
对称加密
使用一个密钥进行加密和解密数据。此库默认方法设置为 aes-256-gcm
如下加密文本
$csp = new AESCryptoServiceProvider(); $csp->generateIV(); $key = $csp->generateKey(); $plainText = "This is going to be encrypted!"; $encryptedText= $csp->encrypt($plainText);
然后你可以像以下示例所示解密文本
$csp2 = new AESCryptoServiceProvider(); $csp2->setKey($key); $decryptedText = $csp2->decrypt($encryptedText);
请保管好你的密钥,因为你需要它来解密数据。你不需要记住 IV(初始化向量),因为它为每次加密生成,然后成为加密数据的一部分。
非对称加密
使用两个不同的密钥进行非对称加密。一个用于加密,一个用于解密。它们通常被称为私钥和公钥。公钥是你想要分享给某人的。使用公钥可以加密数据(或想要发送你消息的人),使用私钥可以解密和读取数据。私钥可以由密码保护。以下是一个示例
$plainText = "This is going to be encrypted!"; $parameters = new RSAParameters(); $parameters->generateKeys("passphrase"); // generating key pair (private and public keys) $rsa = new RSACryptoServiceProvider(); $rsa->setParameters($parameters); $encryptedTest = $rsa->encrypt($plainText); $decryptedText = $rsa->decrypt($encryptedTest);
导出和导入密钥
要为后续的加密/解密数据使用密钥,重要的是将它们存储在某些地方。为此,我创建了阅读器和写入器。以下是如何导出密钥的示例
$parameters = new RSAParameters(); $parameters->generateKeys(); $locator = new TestingParametersLocator(); $writer = new RsaParametersWriter($locator); $writer->write($parameters);
如果您想实现自己的写入器,它们必须实现 MayMeow\Cryptography\Tools\RsaParametersWriterInterface。
如下所示可以导入密钥
$reader = new RsaParametersReader($locator); $parameters2 = $reader->read(); $csp2 = new RSACryptoServiceProvider(); $csp2->setParameters($parameters2);
像在写入器中一样,您也可以实现自己的阅读器。如果您这样做,您的新阅读器必须实现 MayMeow\Cryptography\Tools\RsaParametersReaderInterface
定位器
上述示例中的阅读器和写入器都使用了定位器。定位器是类,可以返回存储 RSAParameters 部分的位置的字符串表示形式。这可以是数据库表、模型、表字段、文件系统中的路径等等。对于阅读器和写入器接口不要求使用一个,但我推荐使用。
如果您想实现自己的定位器,它必须实现 MayMeow\Cryptography\Tools\RSAParametersLocatorInterface。
例如,您可以在测试文件夹中的工具中查看。
加密密钥推导
$p = new Maymeow\Cryptography\CryptoKey(); $p->getCryptograhicKey($password, $salt);
贡献
请随意为此项目做出贡献。有关贡献指南,请查看 https://github.com/MayMeow/contribution
许可证 MIT