openssl1.1.1 sm2算法公钥加密私钥解密
时间: 2025-06-24 09:45:53 浏览: 27
OpenSSL 1.1.1 并未原生支持中国的国家密码标准(GM/T)中的 SM2 算法。如果需要使用 SM2 算法,则需借助 GmSSL 工具包,这是一个基于 OpenSSL 的开源工具包,提供了对中国国家标准加密算法的支持[^4]。
以下是通过 GmSSL 实现 SM2 公钥加密和私钥解密的一个示例:
### 使用 GmSSL 实现 SM2 加密与解密
#### 1. 安装 GmSSL
首先安装 GmSSL 工具包。可以通过源码编译的方式完成安装:
```bash
git clone https://github.com/guanzhi/GmSSL.git
cd GmSSL
./config
make
sudo make install
```
#### 2. 创建 SM2 密钥对
生成 SM2 私钥和对应的公钥证书:
```bash
gmssl ecparam -name sm2p256v1 -genkey -out sm2_private_key.pem
gmssl ec -in sm2_private_key.pem -pubout -out sm2_public_key.pem
```
#### 3. 编写加密程序
下面是一个简单的 Python 脚本,用于演示如何利用 GmSSL 执行 SM2 公钥加密操作:
```python
import subprocess
def encrypt_with_sm2(public_key_path, plaintext):
process = subprocess.Popen(
['gmssl', 'sm2keyutl', '-encrypt', '-inkey', public_key_path],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
output, error = process.communicate(input=plaintext.encode('utf-8'))
if process.returncode != 0:
raise Exception(f"Encryption failed: {error.decode()}")
return output.hex()
public_key_path = "sm2_public_key.pem"
plaintext = "This is a secret message."
ciphertext = encrypt_with_sm2(public_key_path, plaintext)
print(f"Cipher Text: {ciphertext}")
```
#### 4. 解密程序
下面是相应的解密脚本,展示如何使用 SM2 私钥进行解密:
```python
import subprocess
def decrypt_with_sm2(private_key_path, ciphertext_hex):
process = subprocess.Popen(
['gmssl', 'sm2keyutl', '-decrypt', '-inkey', private_key_path],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
output, error = process.communicate(input=bytes.fromhex(ciphertext_hex))
if process.returncode != 0:
raise Exception(f"Decryption failed: {error.decode()}")
return output.decode('utf-8')
private_key_path = "sm2_private_key.pem"
decrypted_text = decrypt_with_sm2(private_key_path, ciphertext)
print(f"Decrypted Text: {decrypted_text}")
```
以上代码展示了如何调用 `gmssl` 命令行工具来执行 SM2 的加解密过程。需要注意的是,在实际应用中可以进一步封装成库函数以便更高效地集成到应用程序中[^4]。
阅读全文
相关推荐



















