Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Алгоритм получения адреса Биткоин (http://forum.oszone.net/showthread.php?t=340800)

Apock 04-06-2019 23:00 2874431

Алгоритм получения адреса Биткоин
 
Всем доброго времени суток. Начал понемногу разбираться в криптографии и для начала решил воспроизвести процесс получения биткоин-адреса из приватного ключа. Алгоритм взял отсюда.
Ну и дальше так:
Код:

UnicodeString key = "18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725", chsum;
  uint8_t private_key[32] = {0};
  uint8_t eliptic_public_key[64] = {0};
  uint8_t compressed_public_key[33] = {0};
  //Заполняем private_key десятичными значениями
  char h[2]={'0'};
  int i=0;
  while(key.Length()!=0)
  {
          h[0]=key[1];
          h[1]=key[2];
          key.Delete(1,2);
          private_key[i] = xtodec(h);
          i++;
  }
  //вычисляем публичный ключ через ECDSA
  const uECC_Curve_t * curve;
  curve = uECC_secp256k1();
  uECC_compute_public_key(private_key, eliptic_public_key, curve);
  key = "";
  for(i=0; i<64; i++)
        key += dectox(eliptic_public_key[i]);
  //преобразуем в сжатый формат публичного ключа
  uECC_compress(eliptic_public_key, compressed_public_key, curve);
  key="";
  for(i=0; i<33; i++)
          key += dectox(compressed_public_key[i]);

А на следующем шаге застрял
Код:

//шифрование публичного ключа
        key = THashSHA2::GetHashString(key);
        RIPEMD_160 hash;
        std::string stdLine(AnsiString(key).c_str());
        hash.message = stdLine;
        stdLine = hash.ripemd_160();
        key = stdLine.c_str();

SHA2 выдаёт результат не совпадающий со схемой на сайте. Проверил через сайт с онлайн-хэшами - результат как у меня. Но биткоиновцы походу получают его как-то по другому.
Где-то наткнулся на то, что надо хэшировать не шестнадцатеричную строку, а байтовый массив сжатого ключа. Вот только как его хэшировать так и не понял.
Сделал так
Код:

key = THashSHA2::GetHashString(*compressed_public_key);
, но результат опять не тот.
Вот здесь при запросе Binary Hash получаю то, что нужно.
Может кто сталкивался, подскажите.


Время: 23:24.

Время: 23:24.
© OSzone.net 2001-