Python3运行ecdsa签名密钥验证代码时报str拼接bytes错误如何解决
解决方案
错误原因
Python2中字符串与字节序列没有明确划分,Python3对str(Unicode字符串)和bytes(二进制字节序列)做了严格的类型隔离,不允许直接拼接两种不同类型的对象。
你使用的ecdsa.VerifyingKey.to_string()方法在Python3环境下返回的是bytes类型,而代码中'\x04'属于str类型,两类对象拼接直接触发了类型错误。
调整代码
只需要将'\x04'改为字节字面量(在引号前加b前缀)即可正常运行,修改后的完整代码如下:
#!/usr/bin/env python3 import codecs import ecdsa key = "bbe5b8853f51285a62f1276b72a162365f0a51c607e38cecb9bcffdf7284b2bc" keyhex = codecs.decode(key, 'hex') sk = ecdsa.SigningKey.from_string(keyhex, curve = ecdsa.SECP256k1) vk = sk.get_verifying_key().to_string() pk = b'\x04' + vk
如果后续需要将公钥转换为十六进制字符串使用,调用pk.hex()即可得到对应结果。
内容的提问来源于stack exchange,提问作者andrewz
相关产品推荐
相关产品推荐

