ECDSA算法代码 python
时间: 2023-03-28 16:01:43 浏览: 210
以下是 ECDSA 算法的 Python 代码示例:
```python
import hashlib
import ecdsa
# 生成公私钥对
sk = ecdsa.SigningKey.generate(curve=ecdsa.SECP256k1)
vk = sk.get_verifying_key()
# 签名
msg = b"hello world"
hash_msg = hashlib.sha256(msg).digest()
signature = sk.sign(hash_msg)
# 验证签名
assert vk.verify(signature, hash_msg)
```
以上代码使用了 Python 的 ecdsa 库来实现 ECDSA 算法。首先,我们生成了一个公私钥对,然后使用私钥对消息进行签名,最后使用公钥来验证签名的有效性。
相关问题
ECDSA算法代码实现
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)
```
注意:这是一个简单的示例,实际应用中需要更加严格地处理异常情况,并且需要保护私钥的安全。
数字签名算法代码
数字签名算法是一种用于确保消息或文档的完整性、认证和不可否认性的加密技术。常见的数字签名算法包括RSA、DSA、ECDSA等。下面是RSA数字签名算法的Python实现代码示例:
```python
import hashlib
from Crypto.PublicKey import RSA
from Crypto.Signature import pkcs1_15
# 生成RSA密钥对
key_pair = RSA.generate(2048)
private_key = key_pair.export_key()
public_key = key_pair.publickey().export_key()
# 签名
message = b"Hello, world!"
hash_obj = hashlib.sha256(message)
signer = pkcs1_15.new(RSA.import_key(private_key))
signature = signer.sign(hash_obj)
# 验证签名
hash_obj = hashlib.sha256(message)
verifier = pkcs1_15.new(RSA.import_key(public_key))
try:
verifier.verify(hash_obj, signature)
print("Signature is valid.")
except:
print("Signature is invalid.")
```
在这个示例中,我们首先生成了一个RSA密钥对,并使用私钥对消息进行签名。然后,我们使用公钥来验证签名的有效性。在验证签名时,我们需要使用相同的哈希算法来计算消息的哈希值。如果签名有效,则输出“Signature is valid.”,否则输出“Signature is invalid.”。