maymeow/cryptography

v1.0.0 2021-10-31 10:39 UTC

README

用于以对称和不对称方式加密和解密数据的加密库。

此包替代了 https://github.com/MayMeow/php-encrypt

PHP Composer

要求

  • 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