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?
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()
.
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.