区块链中的 WIF

说明

这里所有的内容都是随便写的,不要往这些地址进行交易。因为你会失去你的钱。

WIF

WIF(Wallet import format) 钱包导入格式,(也被称为电子钱包的导出格式)是一种私有的 ESCDSA (椭圆曲线签名算法) 秘钥,意在使私钥更容易复制的方式。
下面是一个可以使用的 WIF 加密、解密的测试套件:http://gobittest.appspot.com/PrivateKey

私钥 转换为 WIF

  1. 拿到一个私钥
1
0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D
  1. 如果是 Mainnet 的地址则在前面添加一个 0x80 的前缀,如果是 testnet 地址则在前面添加一个 0xef 前缀。如果私钥对应于压缩的公钥,则在末尾添加一个 0x01 的后缀。
1
800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D
  1. 对扩展的 key 执行一次 SHA-256
1
8147786C4D15106333BF278D71DADAF1079EF2D2440A4DDE37D747DED5403592
  1. 对上一步的结果再执行一次 SHA-256
1
507A5B8DFED0FC6FE8801743720CEDEC06AA5C6FCA72B07C49964492FB98A714
  1. 取上一步的结果的前 4 个字节的作为校验码
1
507A5B8D
  1. 在第二步计算出的扩展秘钥的末尾加上上一步获得的校验码
1
800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D507A5B8D
  1. 最后,再将结果进行一次 BASE58CHECK 编码,即可得到私钥对应的 Wallet Import Format
1
5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ

WIF 转换为私钥

  1. 获得一个 Wallet Import Format 字符串:
1
5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ
  1. 使用 BASE58CHECK 还原字符串
1
800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D507A5B8D
  1. 去除末尾的 4 个字节校验码
1
800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D
  1. 去除起始的一个字节的前缀,如果私钥对应了压缩公钥,则还需要去除末尾的一个字节,即后缀的 0x01。如果它对应于压缩的公钥则 WIF 字符串将以 K 或者 L 开头而不是5,如果是在 testnet 上则是 C 而不是 9 开头。最后得到的内容就是公钥。
1
0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D

WIF 校验码检查

  1. 获取一个 Wallet Import Format 字符串
1
5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ
  1. 对 WIF 进行 BASE58CHECK 编码
1
800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D507A5B8D
  1. 截取末尾的 4 个字节的校验码
1
800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D
  1. 将得到的结果进行 SHA-256 HASH 运算
1
8147786C4D15106333BF278D71DADAF1079EF2D2440A4DDE37D747DED5403592
  1. 将进行一次 HASH 运算的结果再进行一次 SHA-256 HASH 运算。
1
507A5B8DFED0FC6FE8801743720CEDEC06AA5C6FCA72B07C49964492FB98A714
  1. 截取获得运算结果的前 4 个字节的内容
1
507A5B8D
  1. 与前面截取的校验码进行对比。即可校验
1
507A5B8D

参考地址:
https://en.bitcoin.it/wiki/Wallet_import_format