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

使用Python实现DSA密钥对生成和验证的示例代码

发布时间:2024-01-17 09:20:15

DSA(Digital Signature Algorithm)是一种用于数字签名的公钥密码体制,它在数字签名的生成和验证过程中分别使用私钥和公钥。下面是使用Python实现DSA密钥对生成和验证的示例代码:

1. 导入所需模块和库

from Crypto.PublicKey import DSA
from Crypto.Signature import DSS
from Crypto.Hash import SHA256

2. 生成密钥对

key = DSA.generate(2048)
private_key = key
public_key = key.publickey()

3. 对数据进行签名

data = b"Hello, world!"
hash_data = SHA256.new(data)
signature = DSS.new(private_key, 'fips-186-3').sign(hash_data)

4. 验证签名

hash_data = SHA256.new(data)
verifier = DSS.new(public_key, 'fips-186-3')
try:
    verifier.verify(hash_data, signature)
    print("Signature is valid.")
except ValueError:
    print("Signature is invalid.")

使用例子:

from Crypto.PublicKey import DSA
from Crypto.Signature import DSS
from Crypto.Hash import SHA256

# 生成密钥对
key = DSA.generate(2048)
private_key = key
public_key = key.publickey()

# 对数据进行签名
data = b"Hello, world!"
hash_data = SHA256.new(data)
signature = DSS.new(private_key, 'fips-186-3').sign(hash_data)

# 验证签名
hash_data = SHA256.new(data)
verifier = DSS.new(public_key, 'fips-186-3')
try:
    verifier.verify(hash_data, signature)
    print("Signature is valid.")
except ValueError:
    print("Signature is invalid.")

在以上示例代码中,首先导入所需的模块和库。然后使用DSA模块生成2048位的密钥对,私钥存储在private_key变量中,公钥存储在public_key变量中。

在签名过程中,首先使用SHA256哈希算法对待签名的数据进行摘要处理,然后使用私钥和DSA算法对摘要进行签名,生成signature。

在验证过程中,首先使用SHA256哈希算法对原始数据进行摘要处理,然后使用公钥和DSA算法对摘要和签名进行验证。如果验证成功,则说明签名有效。

以上是使用Python实现DSA密钥对生成和验证的示例代码,可以根据实际需求进行修改和使用。