【发布时间】:2019-05-06 23:30:31
【问题描述】:
如果我直接用sk.get_verifying_key()签名密钥生成公钥
它可以正常工作并验证它,但如果我尝试使用ecdsa.VerifyingKey.from_string 手动创建公钥,由于某种原因它不会验证它并返回 false。
复制粘贴以下代码并运行你会发现奇怪的区别
import random
import string
import sys
import ecdsa
import hashlib
import binascii
# randomly generate secret and public keys
sk = ecdsa.SigningKey.generate(curve=ecdsa.NIST256p, hashfunc = hashlib.sha256)
pk = sk.get_verifying_key()
publicKeyVerifyObject = ecdsa.VerifyingKey.from_string(bytes.fromhex(binascii.hexlify(pk.to_string()).decode('utf-8')), curve=ecdsa.NIST256p)
print("public key:", binascii.hexlify(pk.to_string()))
print("public key:", binascii.hexlify(publicKeyVerifyObject.to_string()))
# a message to sign
name = "lastpeony"
# signature of the message
signature = sk.sign(name.encode('utf-8'))
#first test
try:
print (publicKeyVerifyObject.verify(signature, name.encode('utf-8')))
except ecdsa.BadSignatureError:
print (False)
#second test
try:
print (pk.verify(signature, name.encode('utf-8')))
except ecdsa.BadSignatureError:
print (False)
我期望的是两个测试的 True True 输出。
【问题讨论】:
标签: python cryptography ecdsa