首页 > 其他分享 >BTC 地址

BTC 地址

时间:2024-07-23 09:55:53浏览次数:7  
标签:公钥 私钥 err 比特 生成 地址 BTC

比特币地址(Bitcoin Address)是用于接收和发送比特币的唯一标识符,类似于传统金融系统中的银行账号。一个比特币地址由一串字母和数字组成,通常以1、3或bc1开头,具体长度为26至35个字符。以下是比特币地址的主要类型及其特点:

  1. P2PKH地址(Pay-to-PubKey-Hash)
    • 以“1”开头。
    • 例子:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
    • 最为传统和常见的比特币地址类型。
  2. P2SH地址(Pay-to-Script-Hash)
    • 以“3”开头。
    • 例子:3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy
    • 用于实现更复杂的支付条件,例如多重签名地址。
  3. Bech32地址(也称为SegWit地址)
    • 以“bc1”开头。
    • 例子:bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf3q0s
    • 这是比特币协议升级SegWit(隔离见证)后的新地址格式,提供更高的效率和安全性。

地址生成过程

比特币地址是通过以下步骤生成的:

  1. 私钥生成:通过随机生成一个256位的数字,即私钥。私钥是保密的,任何人掌握私钥就能控制相关地址中的比特币。
  2. 公钥生成:使用椭圆曲线加密算法(通常是SECP256K1),从私钥生成公钥。
  3. 公钥哈希:对公钥进行两次哈希:第一次使用SHA-256,第二次使用RIPEMD-160,生成公钥哈希(Public Key Hash)。
  4. 添加版本字节和校验和
    • 在公钥哈希前添加一个版本字节(例如,P2PKH地址的版本字节为0x00)。
    • 对上述数据进行两次SHA-256哈希,从中取前4字节作为校验和,并添加到数据末尾。
  5. Base58编码:最后,对结果进行Base58编码,生成最终的比特币地址。

使用与安全

  • 接收比特币:用户可以将自己的比特币地址提供给他人,以接收比特币。
  • 发送比特币:用户需要用相应的私钥对交易进行签名,证明其对地址内比特币的所有权,然后广播交易到比特币网络。

安全建议

  1. 保管私钥:私钥应安全存储,不能泄露给他人。建议使用硬件钱包或离线冷钱包来存储私钥。
  2. 备份:定期备份私钥或助记词,以防丢失。
  3. 谨慎使用:尽量避免在不安全的网络或设备上操作比特币交易。

btcd示例

使用btcutil来创建比特币地址涉及几个步骤,包括生成密钥对(私钥和公钥),然后使用公钥生成地址。

func NewBTCAddress(){
    // 生成私钥
	privKey, err := btcec.NewPrivateKey()
	if err != nil {
		panic(err)
	}

	// 导出公钥
	pubKey := privKey.PubKey()

	// 生成BTC地址(P2PKH)
	addressPKH, err := btcutil.NewAddressPubKey(pubKey.SerializeUncompressed(), &chaincfg.MainNetParams)
	if err != nil{
		panic(err)
	}
	fmt.Printf("Private Key: %x\n",privKey.Serialize())
	fmt.Printf("Public Key: %x\n",pubKey.SerializeUncompressed())
	fmt.Printf("BTC Address: %s\n",addressPKH.EncodeAddress())

	// 生成公钥hash
	pubKeyHash := btcutil.Hash160(pubKey.SerializeCompressed())

    // 创建一个简单的多重签名脚本
	script, err := txscript.NewScriptBuilder().AddOp(txscript.OP_DUP).
		AddOp(txscript.OP_HASH160).AddData(pubKeyHash).
		AddOp(txscript.OP_EQUALVERIFY).AddOp(txscript.OP_CHECKSIG).Script()
	if err != nil {
		panic(err)
	}
	// 生成P2SH地址
	addressP2SH, err := btcutil.NewAddressScriptHashFromHash(pubKeyHash, &chaincfg.MainNetParams)
	if err != nil{
		panic(err)
	}
	fmt.Printf("P2SH Address: %s\n",addressP2SH.EncodeAddress())

	
	// 生成Bech32地址(P2WPKH)
	addressBech32,err := btcutil.NewAddressWitnessPubKeyHash(pubKeyHash, &chaincfg.MainNetParams)
	if err != nil{
		panic(err)
	}
	fmt.Printf("Bech32 Address: %s\n",addressBech32.EncodeAddress())
}

孟斯特

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特


标签:公钥,私钥,err,比特,生成,地址,BTC
From: https://www.cnblogs.com/lianshuiwuyi/p/18317626

相关文章

  • IP地址追踪:揭示网络活动的幕后真相
    在互联网时代,IP地址是我们与外界连接的重要标识。通过IP地址追踪技术,我们可以识别和定位网络活动的来源,对于网络安全、执法和商业分析都有重要意义。本文将详细介绍IP地址追踪的原理、应用和挑战。什么是IP地址?IP地址(InternetProtocolAddress)是分配给每个连接到互联网的设......
  • IP地址专用HTTPS证书的申请流程(公网、内网)
    IP地址专用HTTPS证书是一种专门为IP地址设计的SSL/TLS证书,用于通过HTTPS协议安全地访问基于IP地址实现的网站或服务。这种证书解决了没有域名的情况下,使用IP地址进行安全通信的需求。申请IP地址证书的前提条件1管理权限:首先,申请IP地址专用SSL证书实现https加密访问,需要对该......
  • ping内网Ip,找出内网21网段未被使用的ip地址
      #!/usr/bin/envpython#-*-coding:utf-8-*-importsubprocessimportipaddressdefping_ip(ip,count=3):"""PinganIPaddressusingthesystem'spingcommandwithagivencount."""#构造ping命令para......
  • I2C设备地址 TargetAddress 24LC04
    说明I2C在总线上支持N-2-N,因此需要用地址来区分设备。一次完整的传输,总是START起始信号之后紧跟设备地址和读写标志。设备地址那么设备地址如何查看和定义的呢?设备地址对应第一个BYTE的BIT7-BIT1,BIT0对应读写标志I2C协议规定,除了0000XXX和1111XXX之外,其他地址均......
  • Python第九章(面向对象基础--属性,继承,dir查看,内存地址,权限等等和银行账户题目,圆的面积
    面向对象创造对象示例代码:类的名字用小驼峰命名法#编写Person类classPerson():passclassCat:#,小括号可以省略pass#对象名=类名per=Person()c=Cat()#小括号不能省略print(type(per))print(type(c))代码结果:<class'__main__.Person'><class'__mai......
  • 提取文本中所有图片的链接地址
    从给定的文本中使用正则表达式提取出所有的图片链接地址代码importres='这是一段干扰信息这是一段干扰信息这是一段干扰信息这是一段干扰信息这是一段干扰信息这是一段干扰信息https://img1.baidu.com/it/u=272155668.1962281314&fm=26&fmt=auto这是一段干扰信息这是一......
  • keepalived绑定单播地址、非抢占模式及LVS的TCP模式的高可用【转】
    背景:keepalived默认是组播地址进行播放,且默认地址是224.0.0.18,如果配置多个keepalived主机,会导致虚拟IP地址存在冲突问题,这种问题怎么解决呢?解决办法:就是将keepalived主机的多播地址修改为单播地址,绑定固定IP地址,避免在多播模式下,通过VRRP进行广播地址,造成IP地址地址冲突。vrrp_......
  • 静态IP地址在网络安全中的角色解析与实测分析
    在这个网络边界日益模糊的时代,每一次点击、每一次数据传输都有着安全问题。作为网络安全体系中的基石,静态IP地址的角色显得尤为重要而复杂。今天,我们的测评团队将带您深入剖析静态IP地址在网络安全中的多重角色,并通过两家代理服务商的实测分析,为您揭开其在实际应用中的神秘面纱......
  • 代码随想录算法训练营第27天 | 回溯3:93.复原IP地址、78.子集、90.子集II
    代码随想录算法训练营第27天|回溯3:93.复原IP地址、78.子集、90.子集II93.复原IP地址https://leetcode.cn/problems/restore-ip-addresses/submissions/547344868/代码随想录https://programmercarl.com/0093.复原IP地址.html#算法公开课78.子集https://leetcode.cn/probl......
  • WLAN与以太网的mac地址修改
    修改WLAN的mac地址打开cmd输入ipconfig/all命令查看WLAN的mac地址和名称将WLAN的名称复制下来打开注册表找到--计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001按下ctrl+F,查找WLAN的名称鼠标右键打开新建,点击字符串值修改mac地址以太网mac地址修改打开设备......