ecdsa 签名密钥格式
ecdsa signing key format
我正在尝试使用 python 创建一个 public/private 密钥对。
我使用以下方法创建了私钥:
private_key = ''.join(['%x' % random.randrange(16) for x in range(0, 64)])
使用这个私钥,我尝试使用 ecdsa 图生成相应的 public 密钥
def privateKeyToPublicKey(s):
sk = ecdsa.SigningKey.from_string(s, curve=ecdsa.SECP256k1)
vk = sk.verifying_key
return ('' + sk.verifying_key.to_string())
由于字符串格式错误的格式错误,我无法创建签名密钥 (sk)。但是我不确定 how/what 字符串 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)
我意识到我的错误,输入必须是字节,私钥是十六进制格式。在 python2 中,您可以使用:
private_key.decode('hex')
或者您可以使用
binascii.unhexlify
在python3
这里有一个更完整的代码示例,可以清楚地说明答案。 Python3.
from ecdsa import SigningKey, SECP256k1
import sha3, random, binascii
private_key = ''.join(['%x' % random.randrange(16) for x in range(0, 64)])
private_key = bytes(private_key, 'utf-8')
private_key = binascii.unhexlify(private_key)
priv = SigningKey.from_string(private_key, curve=SECP256k1)
pub = priv.get_verifying_key().to_string()
keccak = sha3.keccak_256()
keccak.update(pub)
address = keccak.hexdigest()[24:]
print(address, priv.to_string().hex())
我正在尝试使用 python 创建一个 public/private 密钥对。
我使用以下方法创建了私钥:
private_key = ''.join(['%x' % random.randrange(16) for x in range(0, 64)])
使用这个私钥,我尝试使用 ecdsa 图生成相应的 public 密钥
def privateKeyToPublicKey(s):
sk = ecdsa.SigningKey.from_string(s, curve=ecdsa.SECP256k1)
vk = sk.verifying_key
return ('' + sk.verifying_key.to_string())
由于字符串格式错误的格式错误,我无法创建签名密钥 (sk)。但是我不确定 how/what 字符串 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)
我意识到我的错误,输入必须是字节,私钥是十六进制格式。在 python2 中,您可以使用:
private_key.decode('hex')
或者您可以使用
binascii.unhexlify
在python3
这里有一个更完整的代码示例,可以清楚地说明答案。 Python3.
from ecdsa import SigningKey, SECP256k1 import sha3, random, binascii private_key = ''.join(['%x' % random.randrange(16) for x in range(0, 64)]) private_key = bytes(private_key, 'utf-8') private_key = binascii.unhexlify(private_key) priv = SigningKey.from_string(private_key, curve=SECP256k1) pub = priv.get_verifying_key().to_string() keccak = sha3.keccak_256() keccak.update(pub) address = keccak.hexdigest()[24:] print(address, priv.to_string().hex())