Для тех, кто против и/или ближе: если вы считаете, что это оффтоп для SO, любезно укажите мне на другой сайт StackExchange, где этот вопрос был бы более уместным.
Как реализовать кривую ECDSA secp256k1 в PHP?
А точнее: Есть ли решения - т.е. включаемые специализированные классы - уже сделано?
Я вижу, что существует множество библиотек с открытым исходным кодом, классов и прочего, доступного для других языков (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 .. Это довольно аккуратно и имеет существует множество полезных методов и способов управления bitcoind через RPC, но, к сожалению, чистый метод PHP, который мог бы обрабатывать механизм privKey->pubKey, отсутствует.
- http://bitcoinphp.com/ .. Я не смог найти его там.
- расширение openssl в PHP, но, к сожалению, единственный метод дайджеста, упоминаемый в документации OPENSSL-PHP, — это «ecdsa-with-SHA1», и поправьте меня, если я ошибаюсь, но мне нужен «ecdsa- with-SHA256' или что-то в этом роде (?)
- Я даже пытался преобразовать алгоритм из bitcoinjs.js, но с моими крипто-знаниями я не смог извлечь суть из чего-либо. Я просто не понимаю этих кривых, их битовых операций и других жутких вещей.
Я ищу решение PURE PHP. Мне не нужно использовать оболочку, запускающую биткойн, а затем анализировать JSON для пар ключей, а затем...
Почему нет фрагмента кода, который мог бы полностью справиться с этим на PHP? ИЛИ ЕСТЬ?! :)
+1
сделать это для вас. - person admdrew   schedule 05.12.2013