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

时间:2013-12-04 21:21:01

标签: 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 ...

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

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

我知道......

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

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

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

0 个答案:

没有答案