在 Python 中使用 SHA256 散列值进行数字签名

2023-03-28 00:00:00 python sha256 数字签名

在 Python 中,可以使用 hashlib 模块和 RSA 模块进行数字签名。下面是一个示例代码,使用 SHA256 散列值对字符串“pidancode.com”进行数字签名:

import hashlib
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5

# 要进行数字签名的字符串
text = "pidancode.com"

# 创建 SHA256 对象,计算字符串的散列值
sha256 = hashlib.sha256()
sha256.update(text.encode('utf-8'))
hash_value = sha256.digest()

# 读取 RSA 密钥对
with open("path/to/private_key.pem", "rb") as f:
    private_key = RSA.import_key(f.read())

# 创建 PKCS1_v1_5 对象,使用 RSA 私钥进行签名
signer = PKCS1_v1_5.new(private_key)
signature = signer.sign(hash_value)

# 输出数字签名
print(signature.hex())

以上代码会对字符串“pidancode.com”进行数字签名,将字符串的 SHA256 散列值作为签名数据。需要先计算字符串的散列值,然后读取私钥,使用私钥进行签名。最后输出数字签名。如果要对其他字符串进行数字签名,只需将上面示例代码中的 text 变量修改为要签名的字符串即可。

在验证数字签名时,需要使用相应的公钥进行验证。验证数字签名的示例代码如下:

import hashlib
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5

# 要验证的字符串和数字签名
text = "pidancode.com"
signature = bytes.fromhex("...")  # 替换为实际的数字签名

# 创建 SHA256 对象,计算字符串的散列值
sha256 = hashlib.sha256()
sha256.update(text.encode('utf-8'))
hash_value = sha256.digest()

# 读取 RSA 公钥
with open("path/to/public_key.pem", "rb") as f:
    public_key = RSA.import_key(f.read())

# 创建 PKCS1_v1_5 对象,使用 RSA 公钥进行验证
verifier = PKCS1_v1_5.new(public_key)
is_valid = verifier.verify(hash_value, signature)

# 输出验证结果
print(is_valid)

以上代码会读取相应的公钥,使用公钥进行数字签名验证,并输出验证结果。如果要验证其他字符串的数字签名,只需将上面示例代码中的 text 和 signature 变量修改为要验证的字符串和数字签名即可。

相关文章