本文作者:陈进坚
个人博客:https://jian1098.github.io
CSDN博客:https://blog.csdn.net/c_jian
简书:https://www.jianshu.com/u/8ba9ac5706b6
联系方式:jian1098@qq.com

安装扩展

composer require bitwasp/bitcoin     # BTC库,需要运行在64位的php7.0+上
composer require web3p/ethereum-util     # ETH库

注意:使用bitwasp库需要安装PHPgmp扩展,不然会报错Call to undefined function gmp_init()LNMP环境安装gmp扩展可以看我的另一篇文章《LNMP1.6安装gmp扩展》

生成助记词

<?php
require_once './vendor/autoload.php';use BitWasp\Bitcoin\Address\PayToPubKeyHashAddress;
use BitWasp\Bitcoin\Crypto\Random\Random;
use BitWasp\Bitcoin\Key\Factory\HierarchicalKeyFactory;
use BitWasp\Bitcoin\Mnemonic\Bip39\Bip39Mnemonic;
use BitWasp\Bitcoin\Mnemonic\Bip39\Bip39SeedGenerator;
use BitWasp\Bitcoin\Mnemonic\MnemonicFactory;//生成助记词
function createMnemonicWord(){// Bip39//$math = Bitcoin::getMath();//$network = Bitcoin::getNetwork();$random = new Random();// 生成随机数(initial entropy)$entropy = $random->bytes(Bip39Mnemonic::MIN_ENTROPY_BYTE_LEN);$bip39 = MnemonicFactory::bip39();// 通过随机数生成助记词$mnemonic = $bip39->entropyToMnemonic($entropy);// 输出助记词echo $mnemonic;}

创建BTC地址

function createBtcAddress($mnemonicWord,$offset){$seedGenerator = new Bip39SeedGenerator();// 通过助记词生成种子,传入可选加密串'hello'$seed = $seedGenerator->getSeed($mnemonicWord);echo "seed: " . $seed->getHex() . PHP_EOL;               //种子$hdFactory = new HierarchicalKeyFactory();$master = $hdFactory->fromEntropy($seed);$hardened = $master->derivePath("44/0'/0'/0/".$offset);    //44的含义:https://github.com/bitcoin/bipsecho 'WIF: ' . $hardened->getPrivateKey()->toWif();          //私钥$address = new PayToPubKeyHashAddress($hardened->getPublicKey()->getPubKeyHash());return $address->getAddress();}

参数说明:mnemonicWord(带空格的字符串)是上一步生成的助记词;offset(整数)是同一个助记词生成的第几个地址,相同助记词传入相同数字会得到同一个地址

创建ETH地址

use Web3p\EthereumUtil\Util; //头部要额外引入这个类// Bip39
$math = Bitcoin::getMath();
$network = Bitcoin::getNetwork();
$random = new Random();
// 生成随机数(initial entropy)
$entropy = $random->bytes(Bip39Mnemonic::MIN_ENTROPY_BYTE_LEN);
$bip39 = MnemonicFactory::bip39();
// 通过随机数生成助记词
$mnemonic = $bip39->entropyToMnemonic($entropy);
echo "mnemonic: " . $mnemonic.PHP_EOL.PHP_EOL;// 助记词$seedGenerator = new Bip39SeedGenerator();
// 通过助记词生成种子,传入可选加密串'hello'
$seed = $seedGenerator->getSeed($mnemonic);
echo "seed: " . $seed->getHex() . PHP_EOL;
$hdFactory = new HierarchicalKeyFactory();
$master = $hdFactory->fromEntropy($seed);$util = new Util();
// 设置路径account
$hardened = $master->derivePath("44'/60'/0'/0/0");
echo " - m/44'/60'/0'/0/0 " .PHP_EOL;
echo " public key: " . $hardened->getPublicKey()->getHex().PHP_EOL;
echo " private key: " . $hardened->getPrivateKey()->getHex().PHP_EOL;// 可以导入到imtoken使用的私钥
echo " address: " . $util->publicKeyToAddress($util->privateKeyToPublicKey($hardened->getPrivateKey()->getHex())) . PHP_EOL;// 私钥导入imtoken后一样的地址

创建LTC地址

<?php
require_once './vendor/autoload.php';use BitWasp\Bitcoin\Address\PayToPubKeyHashAddress;
use BitWasp\Bitcoin\Bitcoin;
use BitWasp\Bitcoin\Crypto\Random\Random;
use BitWasp\Bitcoin\Key\Factory\HierarchicalKeyFactory;
use BitWasp\Bitcoin\Mnemonic\Bip39\Bip39Mnemonic;
use BitWasp\Bitcoin\Mnemonic\Bip39\Bip39SeedGenerator;
use BitWasp\Bitcoin\Mnemonic\MnemonicFactory;
use BitWasp\Bitcoin\Network\NetworkFactory;// Bip39
$math = Bitcoin::getMath();
// 设置莱特币网络
$network = NetworkFactory::litecoin();
$random = new Random();
// 生成随机数(initial entropy)
$entropy = $random->bytes(Bip39Mnemonic::MIN_ENTROPY_BYTE_LEN);
$bip39 = MnemonicFactory::bip39();
// 通过随机数生成助记词
$mnemonic = $bip39->entropyToMnemonic($entropy);
//$mnemonic = 'security hurdle lift acoustic skate recall hotel elegant amateur hidden escape slow';
echo "mnemonic: " . $mnemonic.PHP_EOL.PHP_EOL;// 助记词$seedGenerator = new Bip39SeedGenerator();
// 通过助记词生成种子,传入可选加密串'hello'
$seed = $seedGenerator->getSeed($mnemonic);
echo "seed: " . $seed->getHex() . PHP_EOL;
$hdFactory = new HierarchicalKeyFactory();
$master = $hdFactory->fromEntropy($seed);$hardened = $master->derivePath("44'/2'/0'/0/0");
echo 'WIF ' . $hardened->getPrivateKey()->toWif($network);
echo PHP_EOL;
$address = new PayToPubKeyHashAddress($hardened->getPublicKey()->getPubKeyHash());
echo 'address ' . $address->getAddress($network);
echo PHP_EOL;

参考文章

  • https://www.cnblogs.com/ygcool/p/11714335.html
  • https://iancoleman.io/bip39/
  • https://github.com/bitcoin/bips

PHP生成助记词和BTC、ETH、LTC地址相关推荐

  1. java助记词反向_GitHub - gangan1345/mnemonic-sdk: Mnemonic bip39 bip32 bip44 生成助记词 私钥...

    mnemonic-sdk Mnemonic bip39 bip32 bip44 支持 BIP39 助记词 支持 BIP32 子私钥 支持 BIP44 多币种管理 Install Gradle: Add ...

  2. (一)区块链钱包之生成助记词

    (一)区块链钱包之生成助记词 (二)区块链钱包之创建钱包地址 (三)区块链钱包之加密算法简介 (四)区块链钱包之创建比特离线交易(BTC交易) (五)区块链钱包之创建以太坊交易(ETH交易) 助记词 ...

  3. 基于Java的Android区块链开发之生成助记词(位数可选)

    基于Java的Android区块链开发之生成助记词 位数可选 具体实现代码 这里使用bitcoinj库,来实现生成bip39的12个助记词,引用库 implementation 'org.bitcoi ...

  4. vue+vite项目当中:介绍一种生成助记词新方法,兼容以太坊

    在上一篇文章 当中我介绍了使用bip39生成助记词,在vue3不同的框架vite.vue-cli当中引入配置的方法.虽然可以生成助记词但是,需要进行大量的配置,尤其是在vite+ES6+vue3项目当 ...

  5. Android(以太坊)生成助记词

    Android(以太坊)生成助记词 之前都是看别人的文章,很少自己写,有时即使是自己摸索出的解决方案(无法直接搜到)的也没有记录下来, 说白了其实就是懒. 先从小的写起,一点一点把还没忘记的记录一下吧 ...

  6. bip39:使用bip39生成助记词

    助记词 从HD钱包的创建方式可知,要创建一个HD钱包,我们必须首先有一个确定的512bit(64字节)的随机数种子. 如果用电脑生成一个64字节的随机数作为种子当然是可以的,但是恐怕谁也记不住. 如果 ...

  7. 关于区块链的助记词以及BTC地址,私钥,公钥,ETH地址获取的方法

    VUE项目中的获取助记词的方式 安装需要的依赖环境 如果你安装了国内的淘宝镜像了 ,建议你用cnpm bip39:npm install bip39 bip32:npm install bip32 e ...

  8. 手把手教你使用Java生成助记词、私钥、地址|Java区块链钱包生成助记词、地址

    一.引入依赖 在spring boot 项目中的 pom.xml文件中加入需要的依赖 <dependency><groupId>org.bitcoinj</groupId ...

  9. php实现助记词转TRX,ETH 私钥和钱包地址

    TRX助记词转地址网上都是Java,js或其他语言开发的示例,一个简单的功能需要依赖其他环境来实现表示不能忍,毕竟php是世界上最好的语言.[狗头] 一.知识准备 要实现助记词转TRX私钥和地址,先需 ...

最新文章

  1. 剑指offer_第20题_包含min函数的栈_Python
  2. 演讲实录 | DevOps五大理念及其落地实践
  3. POJ 3784.Running Median
  4. 刚从阿里、头条面试回来,尚硅谷java数据结构与算法百度云
  5. 中国象棋程序的设计与实现(四)-- 一次“流产”的写书计划
  6. OSI网络体系结构各层协议:
  7. poj 3352 Road Construction(边-双连通分量)
  8. mongodb的delete_大数据技术之MongoDB数据删除
  9. 谈谈感想,8元体会易生信培训
  10. STM32系列 STM32F4xx 独立看门狗(IWDG)
  11. 斐讯k2路由器刷PandoraBox一宽带多人用
  12. 计算机建筑制图实践报告,工程建筑实习报告范文(精选5篇)
  13. 基于Python的Web开发
  14. 【风险管理】信贷生命周期之风险管理
  15. 360系统急救箱用在服务器上,360系统急救箱打开失败的处理操作
  16. Step3:获得单应矩阵(每张图片需要m个棋盘格角点,m≥4)
  17. 开机provision应用
  18. ubuntu安装pr_[原创]Dapr入门教程之二:Dapr的安装
  19. 支持同步的Todo软件
  20. 电子邮件地址怎么注册填写?手机怎么注册邮箱地址?

热门文章

  1. Morgan IT 笔试面试汇总
  2. 移动硬盘传输大文件容易中途断开连接
  3. 总结篇:系统及应用监控的综合思路
  4. GitBook学习入门教程
  5. 深信服链路高可用与策略路由
  6. Android 连接Mysql数据库步骤(新手步骤)
  7. 进入系统后win10电脑死机怎么办
  8. 一起自学SLAM算法:7.7 典型SLAM算法
  9. linux上有趣的项目,介绍几款有趣的开源项目
  10. 心灵的震撼-读《一个少年的梦--京瓷的奇迹》