数字签名算法加密python
时间: 2024-10-15 10:29:36 浏览: 20
sm2数字签名算法python实现
数字签名是一种用于验证数据完整性和身份的技术,它通常结合了哈希函数和公钥密码学。在Python中,常用的数字签名库有`cryptography`和`pycryptodome`等。
以下是一个简单的例子,展示了如何使用`cryptography`库中的`ecdsa`模块进行椭圆曲线数字签名:
```python
from cryptography.hazmat.primitives.asymmetric import ec, padding
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives import serialization
# 生成私钥和公钥对
private_key = ec.generate_private_key(ec.SECP256R1())
public_key = private_key.public_key()
# 加密消息 (在这里我们先哈希消息)
message = b'some secret message'
hash_message = hashes.Hash(hashes.SHA256())
hash_message.update(message)
message_hash = hash_message.finalize()
# 使用私钥进行签名
signature = private_key.sign(
message_hash,
ec.ECDHSignatureAlgorithm(
ec.ECCurveByName.name('P-256')
),
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
)
)
# 用公钥验证签名
try:
public_key.verify(
signature,
message_hash,
ec.ECDHSignatureAlgorithm(
ec.ECCurveByName.name('P-256')
),
padding.PSS(
mgf=padding.MGF1(hashes.SHA256()),
salt_length=padding.PSS.MAX_LENGTH
)
)
print("Signature is valid")
except Exception as e:
print(f"Signature verification failed: {e}")
阅读全文