当前位置:首页 > Python > 正文

Python数字签名实战指南(手把手教你用RSA实现安全数字签名)

在当今数字化时代,Python数字签名技术被广泛应用于软件分发、电子合同、API认证等场景,确保数据的完整性与身份的真实性。本文将带你从零开始,使用RSA签名算法在Python中实现数字签名和验证,即使你是编程小白也能轻松上手!

什么是数字签名?

数字签名是一种用于验证数字信息真实性和完整性的技术。它类似于现实生活中的手写签名,但更加安全可靠。通过Python加密解密机制,发送方使用私钥对消息生成签名,接收方则用公钥验证该签名是否合法。

Python数字签名实战指南(手把手教你用RSA实现安全数字签名) Python数字签名  RSA签名算法 数字签名教程 Python加密解密 第1张

准备工作:安装依赖库

我们将使用Python的 cryptography 库来实现RSA数字签名。首先,请在终端中运行以下命令安装该库:

pip install cryptography

步骤一:生成RSA密钥对

数字签名需要一对密钥:私钥(用于签名)和公钥(用于验证)。我们先用代码生成它们:

from cryptography.hazmat.primitives.asymmetric import rsafrom cryptography.hazmat.primitives import serialization# 生成私钥private_key = rsa.generate_private_key(    public_exponent=65537,    key_size=2048,)# 从私钥导出公钥public_key = private_key.public_key()# 将私钥序列化为PEM格式(可保存到文件)pem_private = private_key.private_bytes(    encoding=serialization.Encoding.PEM,    format=serialization.PrivateFormat.PKCS8,    encryption_algorithm=serialization.NoEncryption())# 将公钥序列化为PEM格式pem_public = public_key.public_bytes(    encoding=serialization.Encoding.PEM,    format=serialization.PublicFormat.SubjectPublicKeyInfo)print("私钥:\n", pem_private.decode())print("公钥:\n", pem_public.decode())

步骤二:使用私钥对消息进行签名

接下来,我们使用私钥对一段文本消息生成数字签名:

from cryptography.hazmat.primitives import hashesfrom cryptography.hazmat.primitives.asymmetric import paddingmessage = b"Hello, this is a secure message!"# 使用私钥签名signature = private_key.sign(    message,    padding.PSS(        mgf=padding.MGF1(hashes.SHA256()),        salt_length=padding.PSS.MAX_LENGTH    ),    hashes.SHA256())print("生成的签名(十六进制):")print(signature.hex())

步骤三:使用公钥验证签名

接收方拿到原始消息、签名和公钥后,即可验证签名是否有效:

try:    public_key.verify(        signature,        message,        padding.PSS(            mgf=padding.MGF1(hashes.SHA256()),            salt_length=padding.PSS.MAX_LENGTH        ),        hashes.SHA256()    )    print("✅ 签名验证成功!消息未被篡改。")except Exception as e:    print("❌ 签名验证失败!", str(e))

完整示例:整合所有步骤

下面是一个完整的可运行示例,适合初学者直接复制测试:

from cryptography.hazmat.primitives.asymmetric import rsa, paddingfrom cryptography.hazmat.primitives import hashes, serialization# 1. 生成密钥对private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)public_key = private_key.public_key()# 2. 定义要签名的消息message = b"This is my important document."# 3. 签名signature = private_key.sign(    message,    padding.PSS(mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.MAX_LENGTH),    hashes.SHA256())# 4. 验证try:    public_key.verify(        signature,        message,        padding.PSS(mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.MAX_LENGTH),        hashes.SHA256()    )    print("✅ 数字签名验证通过!")except:    print("❌ 数字签名无效!")

总结

通过本篇数字签名教程,你已经掌握了如何在Python中使用RSA算法实现安全的数字签名与验证。这项技术是构建可信系统的基础,无论你是开发Web API、区块链应用还是安全通信工具,都离不开它。记住:私钥必须严格保密,而公钥可以自由分发。

关键词回顾:Python数字签名RSA签名算法数字签名教程Python加密解密