比特币地址生成

初次接触比特币和区块链会遇到很多诸如公钥、私钥、钱包地址等看似熟悉却又不甚理解的名词,为此我也查阅了一些网上的资料,做个简单的总结。
比特币地址生成
(上图来源于火币网)
上图形象解释了私钥-公钥-地址的生成流程,下面详细解释一下。
1. 通过随机数生成器省城一组随机数作为私钥,只有私钥才可以操作钱包。私钥通常是一串256字节的数;
2. 对私钥进行SECP256K1(椭圆曲线算法)处理可以生成一串65字节的十六进制数,被称为公钥,公钥的构成:1字节OX04,32字节表示x轴坐标,32字节表示y轴坐标。公钥顾名思义就是谁都可以拥有的,用于查看账户余额、交易等信息,但是无法对钱包进行任何操作,仅仅用于验证。公钥是比特币系统中的一个重要概念。关于椭圆曲线算法,通过私钥可以很容易算出公钥,但是反之则无法**,该算法保证了比特币系统的安全;
3. 对公钥进行一次SHA-256哈希和一次RIPEMD-160哈希后生成公钥哈希,在公钥哈希前增加版本号(比特币主网版本号为OX00)生成带版本号的公钥哈希;
4. 对上一步生成的十六进制数在进行两次SHA-256哈希,生成的十六进制数串取前4字节(8位十六进制数)拼接在带版本号的公钥哈希最后作为校验,生成带版本号和校验的公钥哈希;
5. 最后通过BASE58编码最终生成钱包地址。比特币的钱包地址都是以1开头的。
一些说明:关于钱包地址、私钥、公钥、公钥哈希之间的关系,上述步骤所用到的算法仅BASE58编码可逆向求解,其他都无法逆向**。也就是说钱包地址和公钥哈希可以相互求解,其他只能通过私钥–>公钥–>公钥哈希求得,无法逆向求解。