shetabit/crypto

非对称加密包

v0.1.0 2020-01-11 09:38 UTC

This package is auto-updated.

Last update: 2024-09-11 20:42:14 UTC


README

加密

此包可用于使用PHP中的非对称算法对数据进行加密解密签名

以下算法可用于

  • RSA
  • DSA
  • DH
  • EC

安装

通过Composer

$ composer require shetabit/payment

如何使用

以下是一个简单的编码/解码示例。

$crypto = new Crypto;

// generate private key
$privateKey = $crypto->createPrivateKey();
echo $privateKey;

// generate public key
$publicKey = $crypto->createPublicKey($privateKey);
echo $publicKey;

$data = 'a simple text';

// encrypt, plain data
$encryptedData = $crypto->encrypt($publicKey, $data);
echo $encryptedData;

// decrypt, encrypted data
$decryptedData = $crypto->decrypt($privateKey, $encryptedData);
echo $decryptedData;

创建私钥

您可以创建一个如下所示的私钥

$crypt = new Crypt;

$privateKey = $crypt->createPrivateKey();

echo $privatekey;

以下算法可用于

  • RSA:使用 Crypto::OPENSSL_KEYTYPE_RSA
  • DSA:使用 Crypto::OPENSSL_KEYTYPE_DSA (PHP OpenSSL 不完全支持)
  • DH:使用 Crypto::OPENSSL_KEYTYPE_DH (PHP OpenSSL 不完全支持)
  • EC:使用 Crypto::OPENSSL_KEYTYPE_EC (PHP OpenSSL 不完全支持)
$crypt = new Crypt;

$privateKey = $crypt->createPrivateKey(Crypto::OPENSSL_KEYTYPE_RSA);

echo $privatekey;

创建公钥

可以使用私钥生成公钥

$privatekey = '-----BEGIN EC PRIVATE KEY-----
MIHuAgEBBEgC1SvKxAMTrXYmC9CV+euaL8KVemuuU6I9A5moUh4HgTzESYt35lgc
CiwMetwIaB9RHFM7869D4rClXvnxFy91nMklcY7IsCmgBwYFK4EEACehgZUDgZIA
BAHBdOduvUMAft3s3xq/70CyHtJTfbFAMmyE6rIOAXYlOcvCvwfLRTbAXkZ+PnU+
5SkSqpC036F02Hr8GNxToie+gLrEAsmjQwLImuN9o+1UPwYR3LdG8N4JsnFkIMYr
qTvrA+usw5pjfZmqE4hHlFVdIaIb7r2m8w2OEZTfsfxQjRzY6uE9P3711NWdZdP2
Rg==
-----END EC PRIVATE KEY-----';

$crypt = new Crypt;

$publicKey = $crypt->createPublicKey($privateKey);

echo $publicKey;

加密数据

  • 数据必须是字符串格式。
  • 您需要一个有效的公钥来加密数据。
$publicKey = "-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzLBs9Y2+QSr8l5LV8beY
nidHPHhM0/zMy1V7CiTWQyQVyxsZKHQJZGP+zJNovSH+KG9wfUe5XnC7qVDU80Bi
ABfQFhLe+t7w8UnBbRnDxMnLCjoSrtG8ZlJBkfmvTMf4MdmvMUqzqUD+ssB76BOP
Cce7qGntIlhQOzj3crliLex6E4OmwUP9RgPtIz/GQuI+O/XSf6irkkRjE8Sq9J7S
zU7z/asXcSi9PMzql/3Z/K47azWBZJazpSf6rkfVQzsITcai+CaZvVItCrMq7z94
/poX24CX2MgOxWxv8thRG7jO7nNCT5Smc+wi1j3HXaxbnA3vcAt6yQ6ctXpf1rGI
FwIDAQAB
-----END PUBLIC KEY-----";

$data = 'this is a simple text';

$encryptedData = $crypto->encrypt($publicKey, $data);

echo $encryptedData;

解密数据

  • 您需要一个有效的公钥来解密数据。
$privateKey='private key';

$encryptedData = 'encrypted data';

$decryptedData = $crypto->decrypt($privateKey, $encryptedData);

echo $decryptedData;

签名数据

  • 数据必须是字符串格式。
  • 您需要一个有效的公钥来签名数据。
$privateKey = "-----BEGIN PRIVATE KEY-----
MIHuAgEBBEgC1SvKxAMTrXYmC9CV+euaL8KVemuuU6I9A5moUh4HgTzESYt35lgc
CiwMetwIaB9RHFM7869D4rClXvnxFy91nMklcY7IsCmgBwYFK4EEACehgZUDgZIA
BAHBdOduvUMAft3s3xq/70CyHtJTfbFAMmyE6rIOAXYlOcvCvwfLRTbAXkZ+PnU+
5SkSqpC036F02Hr8GNxToie+gLrEAsmjQwLImuN9o+1UPwYR3LdG8N4JsnFkIMYr
qTvrA+usw5pjfZmqE4hHlFVdIaIb7r2m8w2OEZTfsfxQjRzY6uE9P3711NWdZdP2
Rg==
-----END EC PRIVATE KEY-----";

$data = 'this is a simple text';

$signature = $crypto->sign($privateKey, $data);

echo $signature;

验证签名

  • 您需要一个有效的公钥来验证数据。
$publicKey = "-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzLBs9Y2+QSr8l5LV8beY
nidHPHhM0/zMy1V7CiTWQyQVyxsZKHQJZGP+zJNovSH+KG9wfUe5XnC7qVDU80Bi
ABfQFhLe+t7w8UnBbRnDxMnLCjoSrtG8ZlJBkfmvTMf4MdmvMUqzqUD+ssB76BOP
Cce7qGntIlhQOzj3crliLex6E4OmwUP9RgPtIz/GQuI+O/XSf6irkkRjE8Sq9J7S
zU7z/asXcSi9PMzql/3Z/K47azWBZJazpSf6rkfVQzsITcai+CaZvVItCrMq7z94
/poX24CX2MgOxWxv8thRG7jO7nNCT5Smc+wi1j3HXaxbnA3vcAt6yQ6ctXpf1rGI
FwIDAQAB
-----END PUBLIC KEY-----";

$signature = 'this is a signature';

$verification = $crypto->encrypt($publicKey, $data);

echo $encryptedData ? 'true' : 'false';