今天就跟大家聊聊有关如何用Python实现区块链公私钥关系,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
私钥、公钥:椭圆曲线加密算法生成,但是无法通过公钥倒推得到私钥。公钥的作用是在和对方交易时,使用自己的私钥加密信息,然后对方使用自己的公钥解密获得原始信息,这个过程俗称签名。
地址:由于公钥太长,在交易中不方便使用,就对公钥哈希进行SHA256、RIPEMD160、Base58算法加密生成地址。
2、公私钥加密流程
私钥签名过程:签名即是使用私钥将message加密,然后将原信息和加密后的信息发送出去的过程。
公钥验签过程:收到对方发送的信息和私钥签名后的信息,使用对方的公钥机密签名后的信息,并和原信息进行比对,一致则未篡改,反之。
3、Python实现(以太坊)
生成公私钥
以太坊可以基于密码生成公私钥。
from eth_account import Accountfrom eth_utils.hexadecimal import encode_hexfrom eth_account.messages import encode_defunctimport jsondef get_key(key): """ 获取公钥私钥 :return: 返回公钥、私钥 """ ac1 = Account.create(key) return encode_hex(ac1.key),ac1.address
生成的结果:
密钥是:123
私钥是:0xbd26862c106b7985319b72a08b34ffe2827affb1a7c8f17962456a6f7c5a8246
公钥是:0x1761Ae9C3F60124338aEF74C5C322fB23C1AF8b2
私钥签名
当有一笔交易时,可以使用私钥针对交易签名,所以私钥要保存好。
def message_sign(text, prv_key): """ 基于私钥获取签名 :param text: 待签名的文本 :param prv_key: 私钥 :return: 签名 """ try: message = encode_defunct(text=text) result = Account.sign_message(message, prv_key) result = str(result) result = result[result.find("'signature':"):result.find(')})')] return result[result.find("('") + 2:].replace("'", '') except: return '私钥格式不对'
结果是:
原文是:qwe
私钥是:0xbd26862c106b7985319b72a08b34ffe2827affb1a7c8f17962456a6f7c5a8246
签名是:0x86b90940723e1667df873cfdcfc9ca52f045c29bb5ca700ad85f889a99c5bca43c3a5adc1d25f1b10b3314647424918426439178c0f17034cd8302d8305070131b
公钥验签
当矿工打包时,可以使用公钥进行验证签名。
def verifity(text, signature, address): """ 验证签名 :param text: 原文本 :param signature: 签名 :param address: 公钥 :return: 验证结果 """ try: message = encode_defunct(text=text) address_new = Account.recover_message(message, signature=signature) if address == address_new: return '验证一致' else: return '验证失败' except: return '格式错误'
原文是:qwe
公钥是:0x1761Ae9C3F60124338aEF74C5C322fB23C1AF8b2
签名是:0x86b90940723e1667df873cfdcfc9ca52f045c29bb5ca700ad85f889a99c5bca43c3a5adc1d25f1b10b3314647424918426439178c0f17034cd8302d8305070131b
结果是:验证一致
私钥推导公钥
根据1中的关系私钥是可以推出公钥。
def recover_address(prv_key): """ 基于私钥推出地址 :param prv_key: 私钥 :return: 地址 """ try: acct = Account.from_key(prv_key) return acct.address except: return '格式错误'
结果是:
私钥是:0xbd26862c106b7985319b72a08b34ffe2827affb1a7c8f17962456a6f7c5a8246
结果是:0x1761Ae9C3F60124338aEF74C5C322fB23C1AF8b2
看完上述内容,你们对如何用Python实现区块链公私钥关系有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4210031/blog/4835001