欢迎访问宙启技术站
智能推送

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椭圆曲线公钥加密与解密。请注意,在实际应用中,需要更加细致地处理异常情况,并采取适当的措施来保护私钥的安全。