Как конвертировать HEX адресс кошелька в BASE58CHECK

проблема заключается в том, что не могу получить адресс кошелька в формате BASE58CHECK.

На этом сайте все работает правильно, я нашел скрипты на PHP, GO, JAVA но нигде нет на C# https://www.btcschools.net/tron/tron_tool_base58check_hex.php Со строки 41ba133a7e9094ec3b0b2459561e773a2a81c1724d в строку TSw5ikxGCfts2yyRKz1zSetAPt6bL2Crqy

Я начал переписывать код с PHP на С# вручную, однако возникли ошибки при кодировке:

string data = "41ba133a7e9094ec3b0b2459561e773a2a81c1724d";
string address = hex2bin(data);           
byte[] _address = hex2binbytes(data);
string h_fromByteToString = Encoding.ASCII.GetString(_address);
byte[] h_fromStringToByte = Encoding.ASCII.GetBytes(h_fromByteToString);

При записи с байтов в строку, и после с полученной строки в байты, я получаю совсем другие байты, а далее надо использовать SHA256 и на этом моменте остановился.

Может кто подсказать готовые библиотеки для конвертации, или как поступить в данном случае с кодом?


Ответы (1 шт):

Автор решения: Влад Гаврилюк

Нашел решение, не надо было байты каждый раз кодировать, надо с ними же и работать. Вот готовый код, возможно кому-то пригодиться (немного подправил):

Base58: https://www.nuget.org/packages/Base58/1.0.0?_src=template

    static string Res(string data)
    {               
        byte[] address = Convert.FromHexString(data);
        var hash0 = SHA256.HashData(address);
        var hash1 = SHA256.HashData(hash0);
        var checksum = hash1[..4];
        var res_bytes = address.Concat(checksum).ToArray();
        return Base58.Encode(res_bytes);
    }
→ Ссылка