在 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 变量修改为要验证的字符串和数字签名即可。
相关文章