Python中的ECDSA椭圆曲线公钥加密与解密示例
发布时间:2023-12-17 14:27:18
ECDSA是椭圆曲线数字签名算法的简称,它基于椭圆曲线离散对数难题,广泛应用于密码学领域。在Python中,我们可以使用cryptography库来实现ECDSA算法。下面是一个用Python实现ECDSA椭圆曲线公钥加密与解密的示例代码:
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import utils
# 生成ECDSA密钥对
private_key = ec.generate_private_key(ec.SECP256K1())
public_key = private_key.public_key()
# 对公钥进行序列化
public_pem = public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
# 对私钥进行序列化
private_pem = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.PKCS8,
encryption_algorithm=serialization.NoEncryption()
)
# 加密
message = b"Hello, World!"
encrypted_message = public_key.encrypt(
message,
ec.ECIES(utils.Prehashed(utils.SHA256()))
)
# 解密
decrypted_message = private_key.decrypt(
encrypted_message,
ec.ECIES(utils.Prehashed(utils.SHA256()))
)
print("Original message:", message)
print("Decrypted message:", decrypted_message)
上述代码中,首先使用ec.generate_private_key()函数生成ECDSA密钥对,然后对公钥和私钥分别进行序列化。接下来,使用public_key.encrypt()方法对消息进行加密,使用private_key.decrypt()方法对密文进行解密,最后打印出原始消息和解密后的消息。
以上示例演示了如何使用Python实现ECDSA椭圆曲线公钥加密与解密。请注意,在实际应用中,需要更加细致地处理异常情况,并采取适当的措施来保护私钥的安全。
