现在,让我们回顾上面提到的比特币地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa,该地址是公钥经过转换后的可读格式的字符串。如果解码后,公钥原始是这样的(以16进制表示):

0062E907B15CBF27D5425399EBF6F0FB50EBB88F18C29B7D93

比特币使用Base58算法将公钥编码成可读格式的字符串。该算法与著名的Base64算法类似,但为了避免利用相似性进行攻击,Base58算法将一些字符移除了,因此没有0(数值0)、O(o的大写形式)、I(i的大写形式)、l(L的小写形式)。此外也没有+和/。

下面形象的描述从公钥获取地址的过程:
比特币地址由三部分组成:

Version  Public key hash                           Checksum
00       62E907B15CBF27D5425399EBF6F0FB50EBB88F18  C29B7D93

由于哈希函数是单向的,因此不可能从公钥的hash值中获取公钥。但是,我们可以利用哈希函数计算出公钥的hash值,然后和已经保存的公钥hash值进行对比,从而验证是否匹配。

OK,所有背景已介绍完毕,让我们开始动手写代码吧,这会让上述概念变得更加清晰。

results matching ""

    No results matching ""