大家一般使用钱包客户端(如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位分段转换成十六进制如下 二进制十六进制1010a0011300113011170000001015......最终转换成的十六进制数为 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) —- 编译者/作者:松果 玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。 |
EOS密码学:钱包导入格式(WIF)私钥的生成过程
2020-06-08 松果 来源:区块链网络
LOADING...
相关阅读:
- 币圈鸿钧:10.31比特币以太坊波动区间扩大昨日又双双叒叕止盈出局2020-10-31
- 杨凯:月线收官之战比特币多空难以突围2020-10-31
- 波场链智能合约2020-10-31
- 比特币策略完美到达200多点丽润2020-10-31
- 诗萱言币10.31比特币以太坊的技术指标中均线修复的表现形式有哪些2020-10-31