Я пытаюсь воссоздать адрес Ripple с вики-страницы Account Family , и у меня возникают некоторые проблемы.
7CFBA64F771E93E817E15039215430B53F7401C34931D111EAB3510B22DBB0D8
и общедоступный шестнадцатеричный генератор 0388E5BA87A000CB807240DF8C848EB0B5FFA5C8E5A521BC8E105C0F0A44217828
.71ED064155FFADFA38782C5E0158CB260000000000000000
, который генерирует 9F407F7EC35B9AB44831BF0D47CDDAEF7BC11107CE1D10A65368A12B9338F82E
- этот результат больше, чем у генератора, поэтому я увеличиваю подпоследовательность71ED064155FFADFA38782C5E0158CB260000000000000001
, что генерирует 3545C8FE25A89E83287B79D186018D8600A7D5249673FB6D44A77FB12062203B
- что хорошо.7CFBA64F771E93E817E15039215430B53F7401C34931D111EAB3510B22DBB0D8
к тому, что я только что сгенерировал 3545C8FE25A89E83287B79D186018D8600A7D5249673FB6D44A77FB12062203B
, и получаю результатB2416F4D9CC7326B405CCA0AA755BE3B401BD6E7DFA5CC7F2F5AD0BC433DD113
02FA95E05F5DA5A433F7B1EE4682DAB44AF28FBC04B485993EC2E516C1D3C30D73
, но в примере сжатый открытый ключ03fa25b68da6ff6832e4462fdfb9a2aaa58888c0ed17285ffe92e4465e0c6e782a
Где я сделал ошибку?
Вы можете сослаться на тестовые примеры в моей реализации Go, на которую я ссылался в ответе на аналогичный вопрос .
Для случая, указанного на вики-странице, значения должны быть:
Многие из них находятся в кодировке Ripple base58. Я могу предоставить шестнадцатеричный эквивалент, если требуется, но людям, вероятно, будет проще получить указанный выше пакет Go и запустить тестовые примеры самостоятельно. Для любого программиста (независимо от того, знает он Go или нет) должно быть тривиально настроить тестовый код, чтобы показать ему все детали, которые ему нужны.
Редактировать: с указанными вами частными/общедоступными генераторами (0x7CFBA64F… и 0x0388E5BA…) вы должны хешировать, 0x0388e5ba87a000cb807240df8c848eb0b5ffa5c8e5a521bc8e105c0f0a442178280000000000000000
что 0x28f3e125edb203022c7d22c486284706058c209dbf4a98c3923705a4e5347c7a
хорошо и не требует увеличения подпоследовательности. Это добавляется к модулю частного генератора N, чтобы получить закрытый ключ 0xa5ef877564d096ea445e72fda77c77bb45002261087c69d57cea56b008102d52
.
sum = hash.Sum(sum[:0])
я не вижу особого смысла. Кроме этого, похоже, что для закрытого ключа установлено значение appended private generator
и idx
. subseq
Так что закрытый ключ должен быть 71ED064155FFADFA38782C5E0158CB260000000000000000
?hash.Sum()
Аргумент - это байтовый срез, к которому он добавляет результирующий хеш, чтобы sum=hash.Sum(sum[:0])
используется в цикле для хэша, чтобы перезаписать существующий sum
фрагмент и избежать повторного распределения.Оказывается, я использовал основное семя + последовательность + подпоследовательность, в то время как я должен был использовать общедоступный генератор + последовательность + подпоследовательность. Итак, в моем примере:
0388E5BA87A000CB807240DF8C848EB0B5FFA5C8E5A521BC8E105C0F0A442178280000000000000000
и полу-SHA512 хеширую, получаю28F3E125EDB203022C7D22C486284706058C209DBF4A98C3923705A4E5347C7A
7CFBA64F771E93E817E15039215430B53F7401C34931D111EAB3510B22DBB0D8
(приватный генератор) и 28F3E125EDB203022C7D22C486284706058C209DBF4A98C3923705A4E5347C7A
получаю A5EF877564D096EA445E72FDA77C77BB45002261087C69D57CEA56B008102D52
- приватный ключrhcfR9Cg98qCxHpCcPBmMonbDBXo84wyTn
это именно то, что мне нужно было сгенерировать.
чапы