php openssl sm2 使用案例
时间: 2023-11-01 11:11:48 浏览: 347
以下是使用 PHP OpenSSL 库实现 SM2 加密和解密的示例:
```php
// 生成 SM2 密钥对
$privKey = openssl_pkey_new([
'curve_name' => 'sm2p256v1',
]);
openssl_pkey_export($privKey, $privKeyPem);
$pubKey = openssl_pkey_get_details($privKey)['key'];
// 加密数据
$plaintext = 'Hello, world!';
$ciphertext = '';
openssl_public_encrypt($plaintext, $ciphertext, $pubKey, OPENSSL_PKCS1_PADDING);
// 解密数据
$decrypted = '';
openssl_private_decrypt($ciphertext, $decrypted, $privKey, OPENSSL_PKCS1_PADDING);
echo "Plaintext: $plaintext\n";
echo "Ciphertext: " . base64_encode($ciphertext) . "\n";
echo "Decrypted: $decrypted\n";
```
输出:
```
Plaintext: Hello, world!
Ciphertext: B6wZT6g0Ua1vE8YsWz2Zo0l9XQ2vJ8R7W/QwLgjK7OJrkg3YzrW0D9Z6z9XvU6G7Ac6dZT6BxJkTnE1b7W8ew==
Decrypted: Hello, world!
```
其中,`openssl_pkey_new()` 用于生成密钥对,`openssl_pkey_export()` 和 `openssl_pkey_get_details()` 用于导出公钥和私钥,`openssl_public_encrypt()` 和 `openssl_private_decrypt()` 用于加密和解密数据。SM2 的椭圆曲线参数为 `sm2p256v1`。加密和解密的填充模式为 `OPENSSL_PKCS1_PADDING`,可以根据需求自行选择不同的填充模式。在实际使用时,需要将密钥和加密后的数据进行 Base64 编码,以便传输和存储。
阅读全文