ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

从私钥到地址:token-core-android 生成 ETH、BTC 与 SegWit 地址的原理解读

从私钥到地址:token-core-android 生成 ETH、BTC 与 SegWit 地址的原理解读 从私钥到地址token-core-android 生成 ETH、BTC 与 SegWit 地址的原理解读【免费下载链接】token-core-androida blockchain private key management library on android项目地址: https://gitcode.com/gh_mirrors/to/token-core-android如果你是一名刚接触区块链开发的 Android 开发者一定对私钥怎么变成钱包地址充满好奇。token-core-android 正是这样一款基于 Android 的区块链私钥管理库a blockchain private key management library on android由 imToken 团队开源能让你用一套统一 API 同时管理 BTC、ETH、EOS 三个链的钱包与交易签名。本文不堆代码而是带你从原理层面看懂同一把私钥token-core-android 是如何分别生成 ETH 地址、BTC 地址和 SegWit 地址的。先搞懂私钥、公钥与地址的关系 在理解实现之前先记住一条主线公式私钥 →椭圆曲线算法→ 公钥 →哈希/编码算法→ 地址私钥是一串 256 位的随机数64 位十六进制字符它是钱包的命根子公钥由私钥通过 secp256k1 椭圆曲线乘法推导而地址本质上是对公钥的二次加工不同链的加工方式不同——这正是 token-core-android 设计的精髓。一图看懂token-core-android 的地址生成架构在 token-core-android 中地址生成遵循工厂 策略模式。你只需要告诉工厂你要什么类型的钱包它就会返回对应的地址生成器AddressCreator.java定义统一接口核心方法就是fromPrivateKey()AddressCreatorManager.java工厂类根据链类型ETH/BTC和是否 SegWit 选择实现三者关系可以概括为AddressCreatorManager调度中心 ├── EthereumAddressCreator → ETH 地址 ├── BitcoinAddressCreator → 传统 BTC 地址1 开头 └── SegWitBitcoinAddressCreator → SegWit 地址3 开头代码结构清晰直观你甚至可以在 AddressCreatorTest.java 里看到现成的测试用例直接对照验证。原理一ETH 地址生成Keccak-256 的截尾艺术以太坊地址生成的完整流程如下私钥通过 secp256k1 得到 65 字节公钥含前缀 0x04去掉前缀取后 64 字节对这 64 字节做Keccak-256 哈希取哈希结果的最后 20 字节转成十六进制即得 40 位 ETH 地址对应实现就在 EthereumAddressCreator.java 中核心逻辑只有几行keccak256(pubKeyBytes)之后用Arrays.copyOfRange截取末尾 20 字节。测试用例中同一把私钥稳定得到地址ef678007d18427e6022059dbc264f27507cd1ffc。 小知识点ETH 地址不区分主网/测试网地址生成结果完全一致这也是为什么测试里主网和测试网断言的是同一个值。原理二BTC 传统地址生成Base58Check 的加校验比特币传统地址以1开头就比 ETH 多几步了同样由私钥生成公钥压缩或非压缩对公钥做SHA-256再对结果做RIPEMD-160得到 20 字节的 HASH160前面加上网络版本号主网0x00测试网0x6f再做一次 SHA-256 双重哈希取前 4 字节作为校验和最后整体做Base58Check编码在 BitcoinAddressCreator.java 中这一切由key.toAddress(networkParameters).toBase58()一行封装完成。从测试可以看出同一把私钥、不同网络的效果主网得到1N3RC53vbaDNrziTdWmctBEeQ4fo4quNpq测试网得到n2ZNV88uQbede7C5M5jzi6SyG4GVuPpng6。原理三SegWit 地址生成P2SH 封装的多一步SegWit隔离见证地址以3开头本质是P2SH-P2WPKH比传统地址多了一层封装私钥生成压缩公钥注意SegWit 强制要求压缩格式压缩公钥做 HASH160 得到 pubKeyHash拼出赎回脚本0x0014 pubKeyHash对赎回脚本再做 HASH160加版本号 校验和 Base58Check 编码核心逻辑在 SegWitBitcoinAddressCreator.java 的calcSegWitAddress()方法里。测试中同一把私钥生成3Js9bGaZSQCNLudeGRHL4NExVinc25RbuG可以直观对比它与1开头地址的区别。⚠️ 常见坑如果用 WIF 格式的私钥且公钥未压缩SegWit 生成器会直接抛出异常SEGWIT_NEEDS_COMPRESS_PUBLIC_KEY这是源码里专门做的防御。主网与测试网一套 API 自由切换在 AddressCreatorManager.java 中通过isMainnet参数就能切换MainNetParams和TestNet3Params同一个 BTC 私钥在主网和测试网会得到不同地址开发者可以放心在测试网上演练而不会混淆资产。进阶助记词如何派生出这些私钥你可能更关心用户备份的是 12 个助记词私钥从哪来答案在 BIP44Util.java 中定义的派生路径以太坊m/44/60/0/0/0BTC 主网m/44/0/0BTC SegWitm/49/0/0这就是为什么社区常说 SegWit 钱包叫49 路径钱包助记词 → 种子 → 按 BIP44 路径逐级派生私钥 → 再走上面三条地址生成流程一条完整的钱包链路就此打通。总结一张表记住三种地址生成类型开头字符核心算法关键区别ETH0x 40 位 hexKeccak-256 取末 20 字节不区分主网测试网BTC 传统1SHA-256 RIPEMD-160 Base58Check带网络版本号与校验和SegWit3压缩公钥 赎回脚本 P2SH 封装强制压缩公钥手续费更低现在再看 token-core-android 的源码你会发现私钥到地址的整个过程并没有想象中神秘。它把三个链的差异封装进三个独立的 AddressCreator 实现类里对外只暴露统一的fromPrivateKey()接口。对于新手来说理解了本文的哈希与编码流程就等于拿到了打开区块链钱包开发大门的钥匙。想亲手跑一遍直接 clone 仓库https://gitcode.com/gh_mirrors/to/token-core-android后执行测试即可AddressCreatorTest.java 就是最好的入门演练场。【免费下载链接】token-core-androida blockchain private key management library on android项目地址: https://gitcode.com/gh_mirrors/to/token-core-android创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表