php 创建BTC、LTC、ETH助记词、私钥和地址 使用示例(转)

项目依赖:

bitcoin-php bitcoin的php实现库,用于创建助记词和生成私钥 (此库需要运行在64位的php7.0+上)

ethereum-util 以太坊常用函数php实现库

composer require bitwasp/bitcoin

composer require web3p/ethereum-util

创建助记词并生成BTC私钥(WIF格式,可用于导入其他钱包)、地址:

<?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;

// 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);

$hardened = $master->derivePath("49'/0'/0'/0/0");
echo 'WIF: ' . $hardened->getPrivateKey()->toWif();
echo PHP_EOL;
$address = new PayToPubKeyHashAddress($hardened->getPublicKey()->getPubKeyHash());
echo 'address: ' . $address->getAddress();
echo PHP_EOL;

创建助记词并生成ETH私钥、地址:

<?php
require_once './vendor/autoload.php';

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 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;

注:还没有想到PHP如何实现生成以太坊的V3版本keystore,若有大佬实现过,恳请希望能留下足迹感激不尽

转载说明

文章转自:php 创建BTC、LTC、ETH助记词、私钥和地址 使用示例

原创文章,作者:Zeyu,如若转载,请注明出处:https://jinzhijun.cn/develop/1209

(3)
ZeyuZeyu
上一篇 2022年8月4日 下午7:06
下一篇 2022年8月4日 下午9:21

相关推荐

  • 常见的Web攻击手段(转)

    午饭期间,读者小李与我闲聊,谈到上周去面试的过程。经典的高开低走,面试初期答得还可以,但是到后面却不尽人意。其中有个面试问题引起了我的注意,面试官当时问小李:你知道有哪几种常见的&…

    2021年10月10日
    1.2K
  • PHP控制反转(IOC)和依赖注入(DI)(转)

    IOC(inversion of control)控制反转模式;控制反转是将组件间的依赖关系从程序内部提到外部来管理;DI(dependency injection)依赖注入模式;…

    后端 2021年12月21日
    1.2K
  • 香港阿里云Windows服务器省钱方法

    最近把因为香港阿里云服务器要续费了,因为之前购买的时候服务器上还部署了其他的java系统,当时对Linux操作不熟,所以操作系统选的是Windows的系统,但是阿里云香港的服务器需…

    2020年11月11日
    1.5K
  • 虚拟机centos安装kooder

    前天在群晖上安装了一个gitlab,在github上拉了一些项目,想着搜索项目中代码的内容,但是问题就出现了,搜索只能搜项目名和简介。难道要把所有项目拉下来搜索?于是在网上找解决方…

    2022年3月14日
    2.6K
  • 理解开发HD 钱包涉及的 BIP32、BIP44、BIP39(转)

    理解开发HD 钱包涉及的 BIP32、BIP44、BIP39 数字钱包概念 钱包用来存钱的,在区块链中,我们的数字资产都会对应到一个账户地址上, 只有拥有账户的钥匙(私钥)才可以对…

    2022年8月4日
    4.6K
  • 单点登录SSO设计与实现(转)

    前言: 是时候了解一下SSO相关的知识了,本篇主要是概念篇,发现网上两篇不错的文章,简单整合了一下,原文链接:https://www.cnblogs.com/Java3y/p/10…

    2021年7月29日
    2.3K
  • 红米8A刷机root流程记录

    自从安卓版本升级以后,app抓包https就成了问题,所以上周就在咸鱼上买了一个红米8a,计划着root手机来做开发测试使用。在绑了小米账号7天后,终于可以解除bl锁,然后把手机r…

    2023年3月5日
    5.9K
  • 群晖docker 安装gitlab

    一、安装 1.1 在套件中先安装Docker套件。 1.2 在docker中,注册页签下,搜索:gitlab,双击下载,选latest 1.3下载完成后,在映像页签下,选中gitl…

    2022年3月13日
    3.4K
  • 记录一下宝塔搭建Redis遇到的一个小问题

    最近在对接广东省互联网医院监管平台时,发现广东这边是要求平台必须要有医生和患者要有视频通话功能。因为原本的消息通话是用的网易IM,所以音视频也选的网易。网易音视频能实现通话视频云录…

    2021年6月29日
    1.5K
  • PHP获取客户端相关访问信息

    (一)PHP通过IP获取客户端相关访问信息 (二)PHP解析HTTP_USER_AGENT 获取客户端操作系统 获取客户端操作系统  Windows NT 4.0 = N…

    2020年11月3日
    42.2K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注