用PHP实现secp256k1(ECDSA)(用于比特币)

Smu*_*uuf 6 php bitcoin ecdsa php-openssl

热衷于downvoters和/或关闭者:如果你认为这是SO的offtopic,请指出我的其他StackExchange站点,这个问题更合适.


如何在PHP中实现ECDSA曲线secp256k1?

或者说:是否有任何解决方案 - 即.包括专业课程 - 已经完成了吗?

我可以看到有很多开源库,类和其他语言可用的东西(JavaScript,Python,...)但我整个下午都在谷歌上搜索一些/任何PHP解决方案而且...... 没有!.

这是我的比特币项目,我需要一种如何从私钥生成公钥的方法 ...... 然后我想生成最终的比特币地址.

我知道如何生成私钥(不要担心它是随机的或不是 - 这里不是问题)我有256位十六进制和WIF符号.但下一步:提出一个公钥,然后是最终的比特币地址,对我来说是一个问题,因为我确实没有加密的背景,我知道解决方案是以某种方式利用secp256k1.

这是我到目前为止:

// Random bytes
// $private_key = bin2hex(openssl_random_pseudo_bytes(32));
// But using brainwallet.org style to have easy comparison
$passphrase = "correct horse battery staple";
$private_key = hash('sha256', $passphrase);
var_dump ("PrivKey: $private_key");
// Bitcoin::privKeyToWIF from github.com/mikegogulski/bitcoin-php
$wif = Bitcoin::privKeyToWIF($private_key); 
var_dump ("WIF PrivKey: $wif");
// And now I don't know where to even start ...
Run Code Online (Sandbox Code Playgroud)

tl; dr如何在PHP中实现这一点?(..和privKey->之前的pubKey转换)

http://i.stack.imgur.com/U2neg.png

我知道......

  • http://github.com/mikegogulski/bitcoin-php ..这是非常整洁,有很多有用的方法和方法如何通过RPC 控制bitcoind,但不幸的是,缺少可以处理privKey-> pubKey机制的纯PHP方法.
  • http://bitcoinphp.com/ ..我在那里找不到它.
  • PHP中的openssl扩展,但不幸的是OPENSSL-PHP文档提到的唯一摘要方法是'ecdsa-with-SHA1',如果我错了,请纠正我,但我需要'ecdsa-with-SHA256',或者其他什么东西像那样 (?)
  • 我甚至试图从bitcoinjs.js转换算法,但凭借我的加密知识,我无法提取任何东西的要点.我根本不理解那些曲线及其位操作和其他怪异的东西.

我正在寻找PURE PHP解决方案.我不是在寻找使用shell运行bitcoind然后解析密钥对的JSON然后...

为什么没有一段代码可以在PHP中完全处理这个问题?还是在那里?!:)