用Python实现数字签名
时间: 2023-11-05 20:14:57 浏览: 45
在Python中,我们可以使用cryptography库来实现数字签名。下面是一个简单的示例:
```python
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.backends import default_backend
# 生成RSA密钥对
from cryptography.hazmat.primitives.asymmetric import rsa
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
backend=default_backend()
)
public_key = private_key.public_key()
# 需要签名的数据
data = b'This is some data to be signed'
# 对数据进行哈希
digest = hashes.Hash(hashes.SHA256(), backend=default_backend())
digest.update(data)
hash = digest.finalize()
# 使用私钥对哈希值进行签名
signature = private_key.sign(
hash,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
# 使用公钥验证签名
try:
public_key.verify(
signature,
hash,
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
),
hashes.SHA256()
)
print("Signature is valid")
except:
print("Signature is not valid")
```
上面的代码首先生成了一个RSA密钥对,然后对一个数据进行哈希,使用私钥对哈希值进行签名,最后使用公钥验证签名的有效性。