shetabit / crypto
非对称加密包
v0.1.0
2020-01-11 09:38 UTC
Requires
- php: >=7.2
Requires (Dev)
- phpunit/phpunit: >=8.5
- squizlabs/php_codesniffer: ^3.5
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';