miladrahimi/phpcrypt

PHP项目的加密、解密和哈希工具

v5.0.0 2020-10-17 12:53 UTC

This package is auto-updated.

Last update: 2024-09-17 21:59:15 UTC


README

Latest Stable Version Total Downloads Build Status Coverage Status License

PhpCrypt

PhpCrypt是一个用于在PHP项目中加密、解密和哈希数据的包。它提供了一个易于使用且流畅的接口。

特性

  • 使用AES和其他对称方法进行对称加密/解密。
  • 使用RSA方法进行非对称加密/解密。
  • 使用BCrypt方法对数据进行哈希和验证(例如密码)。

版本

  • v5.x.x
  • v4.x.x
  • v3.x.x(不支持)
  • v2.x.x(不支持)
  • v1.x.x(不支持)

安装

安装Composer并在您的项目根目录中运行以下命令

composer require miladrahimi/phpcrypt "5.*"

对称加密

此示例演示如何使用AES等对称算法加密和解密数据。

use MiladRahimi\PhpCrypt\Symmetric;

$symmetric = new Symmetric();
$encryptedData = $symmetric->encrypt('secret');
echo $symmetric->decrypt($encryptedData); // secret

它生成一个随机密钥,并使用aes-256-cbc方法进行加密/解密数据。

自定义密钥

如果您已经有了密钥,您可以像这样使用自己的密钥

use MiladRahimi\PhpCrypt\Symmetric;

$key = '1234567890123456';

// Set the key using the constructor
$symmetric = new Symmetric($key);

// Or set the key using the setter
$symmetric = new Symmetric();
$symmetric->setKey($key);

// And get the key using the getter
$myKey = $symmetric->getKey();

generateKey方法可以帮助您生成一个新的随机密钥。请参阅下面的片段。

use MiladRahimi\PhpCrypt\Symmetric;

$key = Symmetric::generateKey();

自定义方法

默认情况下,Symmetric类使用aes-256-cbc方法进行加密/解密数据。您也可以使用您首选的方法。请参阅以下示例。

use MiladRahimi\PhpCrypt\Exceptions\MethodNotSupportedException;
use MiladRahimi\PhpCrypt\Symmetric;

try {
    $symmetric = new Symmetric();
    $symmetric->setMethod('aria-256-ctr');
    // ...
} catch (MethodNotSupportedException $e) {
    // The method is not supported.
}

支持的方法

如果您想知道安装的OpenSSL扩展支持哪些方法,请参阅下面的片段

use MiladRahimi\PhpCrypt\Symmetric;

print_r(Symmetric::supportedMethods());

RSA加密

RSA是一种流行的非对称加密/解密算法。以下示例说明了如何使用RSA算法加密/解密数据。

使用私钥加密

在此示例中,我们使用私钥加密数据,并使用相关的公钥解密它。

use MiladRahimi\PhpCrypt\PrivateRsa;
use MiladRahimi\PhpCrypt\PublicRsa;

$privateRsa = new PrivateRsa('private_key.pem');
$publicRsa = new PublicRsa('public_key.pem');

$result = $privateRsa->encrypt('secret');
echo $publicRsa->decrypt($result); // secret

使用公钥加密

在此示例中,我们使用公钥加密数据,并使用相关的私钥解密它。

use MiladRahimi\PhpCrypt\PrivateRsa;
use MiladRahimi\PhpCrypt\PublicRsa;

$privateRsa = new PrivateRsa('private_key.pem');
$publicRsa = new PublicRsa('public_key.pem');

$result = $publicRsa->encrypt('secret');
echo $privateRsa->decrypt($result); // secret

Base64编码

默认情况下,PrivateRsa::encrypt()PublicRsa::encrypt()方法返回的加密数据将被Base64编码。您可以根据以下示例禁用此编码。

use MiladRahimi\PhpCrypt\PrivateRsa;
use MiladRahimi\PhpCrypt\PublicRsa;

$privateRsa = new PrivateRsa('private_key.pem');
$publicRsa = new PublicRsa('public_key.pem');

// Disable Base64 encoding for public encryption
$result = $publicRsa->encrypt('secret', false);

// Disable Base64 encoding for private encryption
$result = $privateRsa->encrypt('secret', false);

哈希

此示例演示如何哈希数据和验证它。

use MiladRahimi\PhpCrypt\Hash;

$hash = new Hash();

$hashedPassword = $hash->make('MyPassword');
echo $hash->verify('MyPassword', $hashedPassword); // true
echo $hash->verify('AnotherPassword', $hashedPassword); // false

错误处理

SymmetricPrivateRsaPublicRsaHash类可能会抛出以下异常

  • EncryptionException:当它无法加密数据时。
  • DecryptionException:当它无法解密数据时。
  • HashingException:当它无法哈希数据时。
  • MethodNotSupportedException:当传递给Symmetric类的加密方法不受支持时。
  • InvalidKeyException:当传递给PrivateRsaPublicRsa类的密钥无效时。

许可证

PhpCrypt最初由Milad Rahimi创建,并采用MIT许可证发布。