zoukankan      html  css  js  c++  java
  • 初识比特币——比特币私钥

    私钥

    私钥是用户在比特币网络的通行证,它用来花费bitcoins,具体来说就是在交易时对交易脚本进行签名。它一个256bit的随机数,一般随机生成,范围在0x1到0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140之间(这是由ECDSA spec256k1算法限定的)。 
    比如下面的随机数就是一个合法的比特币私钥

    0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D
    • 1

    WIF格式

    为使复制比特币私钥不容易出错,通常使用WIF(Wallet Import Format)格式的私钥。下面介绍这种格式私钥的生成算法。 
    1. 随机生成一个256bit的数,用16进制表示如下 

    0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D 

    2. 在1结果前面增加网络标示,0x80表示mainnet网络,0xef表示测试网络(testnet) 

    800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D 

    3. 如果使用压缩公钥,在2的结果后面增加0x01;若使用非压缩公钥,则不追加0x01 
    (本次不使用压缩公钥) 

    800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D 

    4. 对3的结果执行SHA-56hash算法 

    8147786C4D15106333BF278D71DADAF1079EF2D2440A4DDE37D747DED5403592 

    5. 对4的结果再次执行SHA-256 hash算法 

    507A5B8DFED0FC6FE8801743720CEDEC06AA5C6FCA72B07C49964492FB98A714 

    6. 取5结果的前4个字节,作为校验和 

    507A5B8D 

    7. 将6的结果追加到3的后面 

    800C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D507A5B8D 

    8. 对6的结果执行Base58Check 编码算法,得到WIF格式的私钥 

    5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ 

    由上面的步骤可以看到,WIF格式的私钥很容易转换成256位的符合ECDSA规范的私钥;而且很容易校验WIF格式的私钥是否合法。

  • 相关阅读:
    dotnet 使用 MessagePack 序列化对象
    dotnet 使用 MessagePack 序列化对象
    PHP die() 函数
    PHP defined() 函数
    PHP define() 函数
    PHP constant() 函数
    PHP connection_status() 函数
    查看物理CPU个数、核数、逻辑CPU个数
    CF997C Sky Full of Stars
    dotnet 使用 lz4net 压缩 Stream 或文件
  • 原文地址:https://www.cnblogs.com/405845829qq/p/9316064.html
Copyright © 2011-2022 走看看