ECDSA算法代码实现
时间: 2023-10-05 19:11:06 浏览: 151
ECDSA算法实现源码
5星 · 资源好评率100%
ECDSA (Elliptic Curve Digital Signature Algorithm) 是一种基于椭圆曲线密码学的数字签名算法,它是一种公钥密码学,能够确保数据的完整性、真实性和不可否认性。下面是一个简单的 ECDSA 签名算法的 Python 代码实现:
首先我们需要导入一些必要的模块:
```python
from hashlib import sha256
from ecdsa import SigningKey, SECP256k1
```
然后定义一个函数来生成私钥和公钥:
```python
def generate_key_pair():
sk = SigningKey.generate(curve=SECP256k1)
vk = sk.get_verifying_key()
return sk, vk
```
接下来定义一个函数来对数据进行签名:
```python
def sign(data, sk):
h = int.from_bytes(sha256(data.encode()).digest(), 'big')
sig = sk.sign(h.to_bytes(32, 'big'))
return sig
```
最后定义一个函数来验证签名:
```python
def verify(data, sig, vk):
h = int.from_bytes(sha256(data.encode()).digest(), 'big')
return vk.verify(sig, h.to_bytes(32, 'big'))
```
下面是完整的代码实现:
```python
from hashlib import sha256
from ecdsa import SigningKey, VerifyingKey, SECP256k1
def generate_key_pair():
sk = SigningKey.generate(curve=SECP256k1)
vk = sk.get_verifying_key()
return sk, vk
def sign(data, sk):
h = int.from_bytes(sha256(data.encode()).digest(), 'big')
sig = sk.sign(h.to_bytes(32, 'big'))
return sig
def verify(data, sig, vk):
h = int.from_bytes(sha256(data.encode()).digest(), 'big')
return vk.verify(sig, h.to_bytes(32, 'big'))
# 示例
sk, vk = generate_key_pair()
data = "hello, world"
sig = sign(data, sk)
assert verify(data, sig, vk)
```
注意:这是一个简单的示例,实际应用中需要更加严格地处理异常情况,并且需要保护私钥的安全。
阅读全文