猿问

ecdsa 签名密钥格式

我正在尝试使用 python 创建一个公钥/私钥对。


我使用以下方法创建了一个私钥:


private_key = ''.join(['%x' % random.randrange(16) for x in range(0, 64)])

使用此私钥,我尝试使用 ecdsa 图生成相应的公钥


def privateKeyToPublicKey(s):

    sk = ecdsa.SigningKey.from_string(s, curve=ecdsa.SECP256k1)

    vk = sk.verifying_key

    return ('\04' + sk.verifying_key.to_string())

由于格式错误,我的字符串格式错误,我无法创建签名密钥 (sk)。但我不确定字符串 s 应该如何/什么格式才能使 SigningKey 工作。


运行脚本时出现以下错误:


Traceback (most recent call last):

  File "address.py", line 23, in <module>

    privateKeyToPublicKey(private_key)

  File "address.py", line 20, in privateKeyToPublicKey

    sk = ecdsa.SigningKey.from_string(s, curve=ecdsa.SECP256k1)

  File "/usr/local/lib/python3.6/dist-packages/ecdsa/keys.py", line 

149, in from_string

    assert len(string) == curve.baselen, (len(string), curve.baselen)

AssertionError: (64, 32)


慕工程0101907
浏览 233回答 2
2回答

慕标5832272

我意识到我的错误,输入必须以字节为单位,私钥为十六进制格式。在 python2 中,您可以使用:private_key.decode('hex')或者你可以使用binascii.unhexlify在python3中
随时随地看视频慕课网APP

相关分类

Python
我要回答