Ich versuche, die Ripple-Adresse von der Wiki-Seite der Kontofamilie neu zu erstellen , und ich habe einige Probleme.
7CFBA64F771E93E817E15039215430B53F7401C34931D111EAB3510B22DBB0D8
und den öffentlichen Hex-Generator von 0388E5BA87A000CB807240DF8C848EB0B5FFA5C8E5A521BC8E105C0F0A44217828
.71ED064155FFADFA38782C5E0158CB260000000000000000
, was generiert 9F407F7EC35B9AB44831BF0D47CDDAEF7BC11107CE1D10A65368A12B9338F82E
- dieses Ergebnis ist größer als der Generator, also inkrementiere ich die Untersequenz71ED064155FFADFA38782C5E0158CB260000000000000001
, was generiert 3545C8FE25A89E83287B79D186018D8600A7D5249673FB6D44A77FB12062203B
- was gut ist.7CFBA64F771E93E817E15039215430B53F7401C34931D111EAB3510B22DBB0D8
zu dem hinzu, was ich gerade generiert habe 3545C8FE25A89E83287B79D186018D8600A7D5249673FB6D44A77FB12062203B
, und erhalte das ErgebnisB2416F4D9CC7326B405CCA0AA755BE3B401BD6E7DFA5CC7F2F5AD0BC433DD113
02FA95E05F5DA5A433F7B1EE4682DAB44AF28FBC04B485993EC2E516C1D3C30D73
, aber in dem Beispiel ist der komprimierte öffentliche Schlüssel03fa25b68da6ff6832e4462fdfb9a2aaa58888c0ed17285ffe92e4465e0c6e782a
Wo habe ich einen Fehler gemacht?
Sie können auf die Testfälle in meiner Go-Implementierung verweisen, die ich in einer Antwort auf eine ähnliche Frage verlinkt habe .
Für den auf der Wiki-Seite angegebenen Fall sollten die Werte sein:
Viele davon sind in der base58-Codierung von Ripple. Ich kann das Hex-Äquivalent bei Bedarf bereitstellen, aber es ist wahrscheinlich einfacher für die Leute, das oben verlinkte Go-Paket zu bekommen und die Testfälle selbst auszuführen. Es sollte für jeden Programmierer (ob er Go kennt oder nicht) trivial sein, den Testcode zu optimieren, um ihm alle benötigten Details anzuzeigen.
Bearbeiten: Mit den von Ihnen angegebenen privaten/öffentlichen Generatoren (0x7CFBA64F… und 0x0388E5BA…) sollten Sie herausfinden, 0x0388e5ba87a000cb807240df8c848eb0b5ffa5c8e5a521bc8e105c0f0a442178280000000000000000
was 0x28f3e125edb203022c7d22c486284706058c209dbf4a98c3923705a4e5347c7a
gut ist und die Untersequenz nicht erhöhen muss. Das wird dem privaten Generator mod N hinzugefügt, um zu einem privaten Schlüssel von zu führen 0xa5ef877564d096ea445e72fda77c77bb45002261087c69d57cea56b008102d52
.
sum = hash.Sum(sum[:0])
ergibt für mich nicht viel Sinn. Abgesehen davon scheint der private Schlüssel auf angehängte private generator
, idx
und gesetzt zu sein subseq
. Der private Schlüssel sollte also 71ED064155FFADFA38782C5E0158CB260000000000000000
?hash.Sum()
ein Byte-Slice, an das es den resultierenden Hash anhängtsum=hash.Sum(sum[:0])
wird in der Schleife für den Hash verwendet, um den vorhandenen Slice zu überschreiben sum
und Neuzuweisungen zu vermeiden.Es stellt sich heraus, dass ich Master Seed + Sequenz + Subsequenz verwendet habe, während ich den öffentlichen Generator + Sequenz + Subsequenz hätte verwenden sollen. Also in meinem Beispiel:
0388E5BA87A000CB807240DF8C848EB0B5FFA5C8E5A521BC8E105C0F0A442178280000000000000000
und halb-SHA512 hash es, ich bekomme28F3E125EDB203022C7D22C486284706058C209DBF4A98C3923705A4E5347C7A
7CFBA64F771E93E817E15039215430B53F7401C34931D111EAB3510B22DBB0D8
(privater Generator) und 28F3E125EDB203022C7D22C486284706058C209DBF4A98C3923705A4E5347C7A
ich bekomme A5EF877564D096EA445E72FDA77C77BB45002261087C69D57CEA56B008102D52
- den privaten SchlüsselrhcfR9Cg98qCxHpCcPBmMonbDBXo84wyTn
, genau das, was ich generieren musste.
dchapes