OPENSSL Конвертировать двоичные байты в SHA256 C ++ - PullRequest
0 голосов
/ 23 мая 2018

Я в основном пытаюсь получить контрольную сумму для моих мнемонических слов.У меня есть двоичные байты, и я хочу преобразовать их в sha256, чтобы получить первые 4 бита и проверить их.

Мне потребовалось около 2 дней, чтобы понять, что хеширование отличается от текстовой строки до sha256 и от байтов до sha256.Следующая функция работает, но она хешируется как строки, а не как байты.

string sha256(const string str)
{
    unsigned char hash[SHA256_DIGEST_LENGTH];
    SHA256_CTX sha256;
    SHA256_Init(&sha256);
    SHA256_Update(&sha256, str.c_str(), str.size());
    SHA256_Final(hash, &sha256);
    stringstream ss;
    for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
    {
        ss << hex << setw(2) << setfill('0') << (int)hash[i];
    }
    return ss.str();
}

Я новичок в openssl и не смог найти каких-либо решений в Интернете.Если бы кто-то мог адаптировать мою функцию для правильного хеширования двоичных байтов, я был бы очень благодаренБлагодарю.

1007 * Для того, чтобы уточнить вот пример: 10111110011001010101110111001111010100011111011010110001110101111011110111000101101001100011110100010100011101000011011011100000 1009 * это как текст дает мне этот хэш: 2d7ffa3c8f9c3fc043045f2564101eabf80bcdb983d1d560b6b93f52ea824942 1011 * и используются как байты дают мне это правильный хеш: 5e5c92432e692f803539715bb624cd2e35b5b491c6bc67aee87ae82600dedf12 1013 * Я использовал этот сайт для хеширования: https://cryptii.com/hash-function

1 Ответ

0 голосов
/ 23 мая 2018

Так что, кажется, вам нужно интерпретировать ваш ввод как поток битов .Сгруппируйте их в байты и начинайте:

unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
SHA256_Init(&sha256);
uint8_t str[] = { 0b10111110, 0b01100101, 0b01011101, 0b11001111, 0b01010001, 0b11110110, 0b10110001, 0b11010111, 0b10111101, 0b11000101, 0b10100110, 0b00111101, 0b00010100, 0b01110100, 0b00110110, 0b11100000 };
SHA256_Update(&sha256, str, sizeof(str));
SHA256_Final(hash, &sha256);

Вывод хэша:

5e5c92432e692f803539715bb624cd2e35b5b491c6bc67aee87ae82600dedf12

Демонстрация в реальном времени

...