Generieren der Bitcoin-Adresse vom öffentlichen ECDSA-Schlüssel

8

Ich schreibe einfachen Code in C ++ mit OpenSSL, um eine gültige Bitcoin-Adresse zu erzeugen - ein privates Schlüsselpaar.

Ich verwende dieses Snippet, um einen öffentlichen Schlüssel aus einem gegebenen privaten Schlüssel in Hex-Form zu generieren:

%Vor%

Ich möchte diesen öffentlichen Schlüssel in Bitcoin-Adresse umwandeln - was ist der schnellste Weg, dies zu erreichen? Ich weiß nicht, wie man RIPEMD160 aus OpenSSLs BIGNUM erstellt. Oder vielleicht gibt es eine andere, bessere Lösung?

    
mpestkow 16.07.2013, 09:24
quelle

1 Antwort

12

Wenn Sie annehmen, was Sie tun, basiert auf dieser Konvertierung:

Ich werde beschreiben, was Sie in Pseudocode tun können:

Extrahiere zuerst x, y vom öffentlichen Schlüssel.

%Vor%

Als nächstes müssen Sie die Nachricht mehrere Male verdauen, einschließlich 3 sha256 und 1 reifd160. Im folgenden Pseudo-Code zeige ich dir, wie man ripemd160 macht. Um sha256 mit EVP_MD zu erstellen, ersetzen Sie einfach EVP_ripemd160() durch EVP_sha256() und aktualisieren Sie (Eingabe in EVP_MD) Ihre Eingabe-Nachricht mit einem oder mehreren EVP_DigestUpdate() .

%Vor%

Oder rufen Sie sha256() und ripemd160() direkt auf. Sie müssen jedoch Ihre Eingabenachricht vorbereiten, bevor Sie die Hashfunktionen sha256() oder ripemd160() aufrufen.

Die 25-Byte-Binäradresse ist das Ergebnis von ripemd160, zusammen mit den ersten 4 Bytes der 32-Byte-Prüfsumme. Sie müssen einen Weg finden, um es von Base 256 zu Base 58 zu konvertieren. Ich glaube nicht, dass OpenSSL das unterstützt.

    
ChiaraHsieh 17.07.2013, 02:56
quelle

Tags und Links