用Python实现数字签名和验证

2023-03-26 00:00:00 python 验证 数字签名

数字签名是一种在计算机网络上验证消息完整性和认证发送方身份的方式。在Python中,可以使用cryptography库来实现数字签名和验证。

首先,需要安装cryptography库,可以使用pip命令进行安装:

pip install cryptography

接下来,以下是数字签名和验证的示例代码:

from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import hashes

# 生成RSA密钥对
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048
)
public_key = private_key.public_key()

# 要签名的消息
message = b"pidancode.com"

# 使用私钥进行签名
signature = private_key.sign(
    message,
    padding.PSS(
        mgf=padding.MGF1(hashes.SHA256()),
        salt_length=padding.PSS.MAX_LENGTH
    ),
    hashes.SHA256()
)

# 使用公钥进行验证签名
try:
    public_key.verify(
        signature,
        message,
        padding.PSS(
            mgf=padding.MGF1(hashes.SHA256()),
            salt_length=padding.PSS.MAX_LENGTH
        ),
        hashes.SHA256()
    )
    print("Signature is valid")
except:
    print("Signature is invalid")

在这个示例中,首先生成了一个RSA密钥对,然后定义了要签名的消息。接下来使用私钥对消息进行签名,使用公钥进行验证签名。

签名过程中,使用了PSS填充和SHA256哈希算法。在验证签名时,使用相同的填充和哈希算法进行验证。

当运行此代码时,应输出“Signature is valid”,表示签名验证成功。

这个示例中,用的是byte类型的字符串,如果需要使用普通字符串,可以将字符串编码成byte类型,例如:

message = "pidancode.com".encode()

相关文章