首页 > 其他分享 >比特币钱包地址生成问题

比特币钱包地址生成问题

时间:2024-04-02 11:24:05浏览次数:24  
标签:编码 字节 比特 步骤 Base58 地址 钱包 哈希

l 问题描述:

比特币钱包负责管理私钥,在收款时往往会展示钱包地址。钱包地址的生成步骤如下(如图所示):

获取私钥对应的公钥,再根据公钥计算公钥哈希值(ripemd160函数),得到一个20字节长度的字节数组;

1.在公钥哈希值前面添加比特币地址版本号(1个字节,当前默认为0x00);

2.对步骤1得到的数据进行两次SHA—256哈希操作(先计算哈希,再把结果作为输入再计算哈希),然后取结果的前4个字节作为校验和;

3.将步骤1和步骤2得到的结果拼接在一起,得到一个字节数组(25个字节长度,0x00+公钥哈希+校验和);

4.使用Base58编码算法将步骤3中生成的字节数组进行编码。

 

图 一:比特币地址生成基本流程

比特币的Base58编码是一种用于表示比特币地址和其他数据的编码方式,它遵循以下步骤或规则:

(1)定义Base58字符集:比特币的Base58字符集由58个字符组成,去除了容

易混淆的字符(例如0、0、I、1等)和可能导致歧义的字符(例如+、/等)。

(2)将待编码的数据转换为大整数:将待编码的数据(比如字节数组)视为一个大整数。

(3)对数据进行连续除法和取余运算:将步骤(2)中的大整数不断进行除以58的运算,得到的商作为下一轮的被除数,而余数则作为Base58编码结果的一个字符。重复此步骤直到商为0。

(4)拼接Base58字符:将步骤(3)中得到的每个余数所对应的Base58字符拼接在一起,得到最终的Base58编码结果。

(5)处理前导零:如果原始数据中有前导零(即值为0的字节),则在Base58编码结果中添加相应数量的Base58字符1。

(6)反转编码结果:将步骤(4)得到的Base58编码序列进行反转,得到最终的Base58编码结果。

Base58编码字符集定义如下:BASE58_ALPHABET=

"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghi jkmnopqrstuvwxyz"

l 要求:

完成题目对应的程序模板(BtcAddress)中的方法:String buildAddress(String pubKeyHashHex);

该方法的入口参数pubKeyHashHex为公钥的哈希值(20字节长度的字节数组),采用16进制Hex字符串表示(40长度的字符串)

最后输出结果为生成的钱包地址。

提示:程序模板中已提供SHA256标准算法,建议使用

l 样例:

n 样例1

输入:749caa98f63a077a9a02f3b742eff2b55e638fe1

输出:1Bdb4dDTKar3TLvrwAhtv37FeMALL8fJp8

标签:编码,字节,比特,步骤,Base58,地址,钱包,哈希
From: https://www.cnblogs.com/Alisa-zmj/p/18110193

相关文章

  • 判断ip地址是否合法(美团2024届秋招笔试第三场编程真题)
    核心思想大模拟-。-,还是不够细心,面向样例编程,一路错过去的。写得太丑了凑合看吧。代码importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){finallongMOD=(long)(1e9+7);Scannerscanner=newScanner(Syste......
  • stm32cubeide 调试非 0x08000000 地址程序配置
    使用stm32cubeide调试非0x08000000,我们需要一些配置.ld链接脚本条件编译目前如果要修改程序的启动地址需要修改两个地方system_stm32f103xx.c中的VECT_TAB_OFFSET,可通过宏定义开启或者关闭.ld链接脚本,可通过宏进行条件编译,也可以直接修改ld,创建不同的链接脚本文件,创建......
  • 基于全局地址池配置DHCP配置(eNSP)
    本案例利用华为eNSP模拟器,完成了基于全局地址池配置DHCP配置,由AC作DHCP服务器,为网络中的AP和无线网络中的STA分配IP地址。一、拓扑结构二、网络规划1、AC1做DHCP服务器,为AP1、AP2、AP3分配固定IP地址2、AC1做DHCP服务器,为移动接入用户分配动态IP3、AP1为VLAN10内设备,AP2......
  • 亿级地址关联匹配如何实现每天全量更新?大数据环境下hive+addresstool解决方案
    在政务系统中有许多需要将业务地址关联到标准地址的场景,addresstool致力于解决地址关联匹配算法中的速度和准确性问题。最近遇到一个业务痛点,由于客户标准地址在持续更新,导致历史上业务地址关联到的标准地址无法与最新的标准地址挂接,于是客户要求每日对全量业务地址进行挂接标准......
  • NAT(网络地址转换协议)
    NAT工作原理和功能原理:通过地址转换实现私有网络和公有网络之间的相互访问。其工作过程如下图所示,当数据包从内网发往外网时,NAT会将数据包的源IP由私网地址转换成公网地址;当响应的数据包要从公网返回到内网时,NAT会将数据包的目的IP由公网地址转换成私网地址。功能:1.宽带分......
  • 广播地址和子网掩码之间有什么区别?子网掩码和ip冲突问题
    广播地址和子网掩码在计算机网络中各自扮演不同的角色,它们之间有着明显的区别。【广播地址和子网掩码的区别】广播地址是一个特殊的IP地址,专门用于向网络中所有工作站发送信息。当设备发送数据包到广播地址时,所有连接到同一个网络的设备都会接收到该数据包。广播地址的存在使......
  • 网络地址转换-NAT
    目录NAT概述NAT功能NAT的工作过程NAT使用场景与配置内网客户端主动访问外网服务器外网客户端访问位于内网的服务器ACL访问控制列表作用ACL的工作原则NAT概述NAT(NetworkAddressTranslation,网络地址转换)是一种网络协议,用于在IP网络中转换IP地址。它主要用于在私......
  • 什么是Docker引擎架构,Docker引擎架构详解及Vmware,CentOS7、Docker引擎的安装,CentOS7常
    Dockere引擎架构详解2.1Docker引擎发展历程2.1.1首发版本架构       Docker在首次发布时,其引擎有两个核心组件构成,LXC(LinuxContainer)与DockerDaemon构成。不过该架构依赖于LXC,使得Docker存在严重的问题:依赖于外部工具对Docker来说存在着巨大的生存风险。......
  • 查看Centos 网卡MAC地址
    方法一:IP命令iplinkshow如果知道具体网卡如eth0,iplinkshoweth0或者ipaddr如果知道具体网卡如eth0,ipaddrshoweth0方法二:ifconfig命令ifconfig-a如果知道具体网卡如eth0,ifconfigeth0以上方法在输出中,你会看到网卡的MAC地址列在link/ether后面。例如:ether00......
  • 【Blockchain】区块链浏览器 | 以太坊Etherscan比特币Blockchain门罗币Monero
    区块链浏览器概述区块链浏览器是一种软件,它使用API(应用程序编程接口)和区块链节点从区块链中提取各种数据,然后使用数据库来排列搜索到的数据,并以可搜索的格式将数据呈现给用户。用户的输入是资源管理器上的可搜索项,然后通过数据库上的组织表进行搜索。浏览器已经将区块......