SM2算法加密解密 “Hello,SM2" python实现
时间: 2024-12-24 19:12:48 浏览: 20
SM2是一种非对称密码算法,由中国的密码学家设计,用于中国国家商用密码体系。它包括椭圆曲线Diffie-Hellman (ECDH) 算法以及数字签名方案。在Python中,我们可以使用第三方库如`pycryptodome`来进行SM2的加密和解密操作。
下面是一个简单的例子,展示了如何使用`pycryptodome`库来实现SM2算法加密和解密"Hello, SM2":
```python
from Crypto.PublicKey import ECC
from Crypto.Signature import DSS
from Crypto.Hash import SHA256
# 加密部分
def sm2_encrypt(message, public_key):
curve = ECC(curve='P-256')
point = curve.generator.point.decode('hex') # 使用预设的生成点
shared_secret = point * public_key.point
hash_object = SHA256.new(message.encode('utf-8'))
encrypted_message = shared_secret.x().to_bytes(32, byteorder='big') + hash_object.digest()
return encrypted_message
# 解密部分
def sm2_decrypt(ciphertext, private_key):
curve = ECC(curve='P-256')
decrypted_secret_x = int.from_bytes(ciphertext[:32], byteorder='big')
shared_secret_point = curve.generator.point * private_key.point
hash_object = SHA256.new(ciphertext[32:].decode('hex'))
if shared_secret_point.x() == decrypted_secret_x:
return hash_object.hexdigest().decode('utf-8')
public_key = ECC.generate(curve='P-256').public_key().export_key(format='DER')
private_key = ECC.generate(curve='P-256').export_key(format='DER', include_private=True)
message = "Hello, SM2"
encrypted_msg = sm2_encrypt(message, public_key)
decrypted_msg = sm2_decrypt(encrypted_msg, private_key)
print(f"原始消息: {message}")
print(f"加密后的消息: {encrypted_msg.hex()}")
print(f"解密后的消息: {decrypted_msg}")
```
注意:这个示例仅供参考,实际应用中你需要处理公钥、私钥的安全存储和传输,并确保正确的导入密钥和哈希算法。此外,SM2的具体实现可能会因库的不同而有所差异。
阅读全文