生成python基于RSA的非对称数字签名
时间: 2023-07-04 14:27:34 浏览: 52
下面是一个基于RSA的数字签名的Python示例代码,使用了pycryptodome库:
```python
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
# 生成RSA密钥对
key = RSA.generate(2048)
# 原始数据
data = b'This is a test message.'
# 对数据进行哈希
hash_obj = SHA256.new(data)
# 使用私钥对哈希值进行签名
signature = pkcs1_15.new(key).sign(hash_obj)
# 将签名和原始数据一起发送给接收方
# 接收方使用公钥对签名进行验证
hash_obj = SHA256.new(data)
try:
pkcs1_15.new(key.publickey()).verify(hash_obj, signature)
print("Signature is valid.")
except (ValueError, TypeError):
print("Signature is invalid.")
```
这个示例代码生成了一个2048位的RSA密钥对,对一个消息进行哈希,并使用私钥对哈希值进行签名。然后,使用公钥对签名进行验证,如果验证通过,则说明签名是有效的。
相关问题
python基于RSA的非对称数字签名
下面是一个Python基于RSA的非对称数字签名的示例代码:
```python
import hashlib
import rsa
# 生成RSA密钥对
(private_key, public_key) = rsa.newkeys(512)
# 原始消息
message = "Hello, world!"
# 对原始消息进行哈希处理
hash_value = hashlib.sha256(message.encode('utf-8')).hexdigest()
# 使用私钥对哈希值进行数字签名
signature = rsa.sign(hash_value.encode('utf-8'), private_key, 'SHA-256')
# 使用公钥对数字签名进行验证
if rsa.verify(hash_value.encode('utf-8'), signature, public_key):
print("Signature is valid.")
else:
print("Signature is invalid.")
```
步骤说明:
1. 使用RSA算法生成一个512位的密钥对,其中包括公钥和私钥。
2. 生成一个原始消息。
3. 对原始消息进行哈希处理,使用SHA-256哈希函数生成一个256位的哈希值。
4. 使用私钥对哈希值进行数字签名,生成一个签名。
5. 使用公钥对签名进行验证,判断签名是否有效。
需要注意的是,数字签名只能保证消息的完整性、真实性和不可否认性,而不能保证消息的保密性。因此,在实际应用中,如果需要保证消息的保密性,可以对消息进行加密处理,然后再进行数字签名。
生成python基于RSA的非对称数字签名,认证信息为任意可输入数字
下面是一个基于RSA的数字签名的Python示例代码,使用了pycryptodome库,认证信息为任意可输入数字:
```python
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
# 生成RSA密钥对
key = RSA.generate(2048)
# 获取认证信息
auth_info = input("请输入认证信息:").encode('utf-8')
# 对认证信息进行哈希
hash_obj = SHA256.new(auth_info)
# 使用私钥对哈希值进行签名
signature = pkcs1_15.new(key).sign(hash_obj)
# 将签名和认证信息一起发送给接收方
# 接收方获取认证信息和签名
auth_info = input("请输入认证信息:").encode('utf-8')
signature = input("请输入签名:").encode('utf-8')
# 对认证信息进行哈希
hash_obj = SHA256.new(auth_info)
# 使用公钥对签名进行验证
try:
pkcs1_15.new(key.publickey()).verify(hash_obj, signature)
print("Signature is valid.")
except (ValueError, TypeError):
print("Signature is invalid.")
```
这个示例代码生成了一个2048位的RSA密钥对,获取输入的认证信息,并对认证信息进行哈希。然后,使用私钥对哈希值进行签名。接着,将签名和认证信息一起发送给接收方。
接收方获取输入的认证信息和签名,并对认证信息进行哈希。最后,使用公钥对签名进行验证,如果验证通过,则说明签名是有效的。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)