EOS密码学:钱包导入格式(WIF)私钥的生成过程

 空投币   2020-06-08  来源:互联网  0 条评论
优质活动 币圈快讯 平台公告 行情分析
最新羊毛 最新空投 链圈挖矿 活动线报
新币上市 币圈空投 国外项目 币链屋
提醒:本站内容均转自网络,仅用于开发者下载测试,请明辨风险,若涉资金安全及隐私,请谨慎!谨慎!再谨慎!一切风险自担,涉及资金交易及个人隐私务必小心并远离,切记千万别投资,勿上当受骗。《本站免责申明》


大家一般使用钱包客户端(如TokenPocket)操作EOS账户,这就需要把EOS账户权限对应的私钥(Private Key)导入到钱包,一般导入Active权限的私钥。

这种可以导入到钱包的私钥格式称为Wallet Import Format(WIF)私钥,即钱包导入格式的私钥,WIF私钥的概念最早来自比特币。

EOS的WIF私钥一般是这样的

5K4AgqVQY98vCYtPK9xbT99ui3FgLFp3j5Vso1dFuVmaVPuppD2

以数字5开头的51个字符的字符串。

加密货币的私钥

对于比特币、以太坊、EOS等加密货币,私钥实际上就是一串二进制数字,这串二进制数字的位数为256位。

生成一个比特币私钥在本质上与“在1到2^256之间选一个数字”无异,更准确地说,私钥可以是1 和n-1之间的任何数字,其中n是一个常数(n=1.158*10^77,略小于 2^256)。

EOS的密码学原理绝大部分采用了和比特币相同的各种加密算法。

随机生成256位二进制数

生成私钥的第一步,是随机生成一个256位的二进制数。

从编程的角度,一般是通过在一个密码学安全的随机源中取出一长串随机字节,对其使用sha256哈希算法进行运算,这样就可以方便地产生一个256位的数字。如果运算结果小于n-1,就有了一个合适的私钥。否则,就用另一个随机数再重复一次。

这里简单处理,使用网络上的伪随机数生成器生成一个256位的二进制数

1010001100110111000001010010011111001111100010110111001011100101100000110011111101011001100100000101001100011101110110100010000110001100001100001010110110110111001101011000011111101110001011010101110111101011110100010111100111101100001000101101101010001011

每8位(bit)二进制数为一个字节(byte),这是一个32字节的数据。

256位二进制数转为64位十六进制数

在密码学领域,二进制数一般会转换成十六进制数进行处理,因为每4位二进制数可以自然地转换成1位十六进制数。上面的二进制数每4位分段转换成十六进制如下

二进制十六进制
1010a
00113
00113
01117
00000
01015
......

最终转换成的十六进制数为

a3370527cf8b72e5833f5990531dda218c30adb73587ee2d5debd179ec22da8b

这一步可以使用Python的hex函数进行处理

python hex(int(s,2))


私钥的格式

EOS的加密算法主要来自于比特币,这里先介绍比特币私钥的两种格式:非压缩的私钥格式、压缩的私钥格式。

  • 非压缩的私钥格式

在32字节的私钥前添加一个前缀字节(0x80),得到33字节的数据。 然后通过两次sha256哈希算法计算33字节数据的校验码(4字节),校验码作为后缀加到原私钥末尾,得到37字节的数据。


对这37字节的数据进行Base58编码,得到的WIF私钥总是以"5"开头。

  • 压缩的私钥格式

在32字节的私钥前后添加一个前缀字节(0x80)和后缀字节(0x01),得到34字节的数据。然后通过两次sha256哈希算法计算34字节数据的校验码(4字节),校验码作为后缀加到原私钥末尾,得到38字节的数据。


对这38字节的数据进行Base58编码,得到的WIF私钥总是以"K"或"L"开头。

生成WIF私钥

EOS采用的是非压缩的私钥格式,给十六进制私钥添加前缀字节(0x80)后私钥变成

80a3370527cf8b72e5833f5990531dda218c30adb73587ee2d5debd179ec22da8b

数据增加一个字节,变为33字节。

对33字节的数据进行sha256哈希运算得到

f017c469c63da0524a273aee7557a3c238ee3f3360e82ba0e2799d5beafc129c

对上一步的结果再次进行sha256哈希运算得到

0a3f8a2df7096cb51c6816a65685813153aebf691fa11f12ad7e91072ee1f5d9

取上一步结果的前4个字节作为校验码(checksum)

0a3f8a2d

把4字节的校验码加到33字节数据末尾,得到37字节数据

80a3370527cf8b72e5833f5990531dda218c30adb73587ee2d5debd179ec22da8b0a3f8a2d

对37字节数据进行Base58编码得到最终的WIF私钥

5K4AgqVQY98vCYtPK9xbT99ui3FgLFp3j5Vso1dFuVmaVPuppD2

以上过程可以使用Python来运算,代码如下

import hashlib import base58 s = 'a3370527cf8b72e5833f5990531dda218c30adb73587ee2d5debd179ec22da8b' s33 = b'\x80' + bytes().fromhex(s) checksum = hashlib.sha256(hashlib.sha256(s33).digest()).digest()[0:4] wif = base58.***encode(s33 + checksum) print("wif_private_key: ", wif)


本文地址:http://bilianwu.com/53769.html
版权声明:项目均采集于互联网, 空投币 无法审核全面,且希望大家能赚钱,请谨慎切勿上当受骗!
温馨提示:★★★天上真会掉馅饼!天道酬勤,都是机会!不错过每个空投糖果!真假难以辨认,尽量0撸!
重要提醒:本站内容均转自互联网,请明辨各个项目风险,不构成投资建议,如涉及资金交易,请谨慎操作与自担风险!
《新人必看》 《本站免责申明》

评论已关闭!