利用rsa数字签名python原理
时间: 2023-07-11 08:49:22 浏览: 93
RSA 数字签名是一种非对称加密技术,它使用私钥对数据进行签名,并使用公钥进行验证。在 Python 中,可以使用 PyCryptodome 库来实现 RSA 数字签名。
首先,需要生成一对公私钥。可以使用以下代码生成一个 2048 位的 RSA 密钥对:
```python
from Crypto.PublicKey import RSA
key = RSA.generate(2048)
private_key = key.export_key()
public_key = key.publickey().export_key()
```
接下来,可以使用私钥对数据进行签名。假设需要签名的数据为 `data`,可以使用以下代码生成签名:
```python
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256
hash_obj = SHA256.new(data)
signer = pkcs1_15.new(RSA.import_key(private_key))
signature = signer.sign(hash_obj)
```
最后,可以使用公钥验证签名的有效性。假设收到了一个签名为 `signature` 的数据,并且知道它是由公钥 `public_key` 签名得到的,可以使用以下代码验证签名:
```python
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256
hash_obj = SHA256.new(data)
verifier = pkcs1_15.new(RSA.import_key(public_key))
try:
verifier.verify(hash_obj, signature)
print("Signature is valid.")
except:
print("Signature is invalid.")
```
在这个例子中,我们使用 SHA256 散列算法对数据进行哈希,然后使用 PKCS#1 v1.5 签名算法对哈希值进行签名。在验证时,我们使用相同的哈希算法和签名算法对签名进行验证。如果验证成功,则说明签名是有效的,否则签名是无效的。
阅读全文