python cryptography中的rsa实现数字签名,私钥如何保存,公钥如何放松给浏览器
时间: 2024-10-11 20:13:27 浏览: 54
在Python的cryptography库中,RSA可以用于数字签名,这是一种加密技术,它利用了公钥加密和私钥解密的特点。以下是基本步骤:
创建 RSA 对象: 首先,你需要导入
cryptography.hazmat.primitives.asymmetric.rsa
模块,并生成一对RSA密钥对,包括公钥和私钥:from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric import rsa key = rsa.generate_private_key(public_exponent=65537, key_size=2048) public_key = key.public_key()
使用私钥进行数字签名: 使用
private_key.sign()
方法,你可以将数据(通常是一段明文)签名,返回的是一个由签名算法产生的二进制值:message = "Some data to sign" signature = private_key.sign(message.encode(), padding.PSS(mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.MAX_LENGTH))
保存和加载私钥: 私钥需要安全存储,一般会将其序列化并使用安全的方式存储,如加密文件或密码管理器。使用
serialization
模块:pem = private_key.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.PKCS8, encryption_algorithm=serialization.NoEncryption() ) with open('private_key.pem', 'wb') as f: f.write(pem) # 加密存储示例(这里省略) # encrypted_pem = encrypt_with_secrets_management(private_key_pem) # 从文件加载私钥 with open('private_key.pem', 'rb') as f: loaded_private_key = serialization.load_pem_private_key(f.read(), password=None)
分发公钥给浏览器: 公钥不需要保密,可以公开发布。对于Web应用,通常会在HTTPS服务器证书、JSON Web Key Set (JWKS) 或者其他可信位置提供公钥,以便客户端(如浏览器)验证数据签名:
- 在HTTPS证书中,公钥包含在Subject Public Key Info (SPKI) 中。
- 在JWKS中,可以将公钥以JSON格式存储,通过URL提供。
阅读全文
相关推荐


















