Крипто : генерация хэша зависает в Windows 10

#c #crypto #sha-3

Вопрос:

У меня есть следующая простая программа :

 #include <cryptlib.h>
#include "sha.h"
#include <sha3.h>
#include <filters.h>
#include <hex.h>
#include <beast/core/detail/base64.hpp>

using namespace CryptoPP;
using namespace boost::beast::detail::base64;

int main(int argc, char** argv) {

    if (argc < 2) {
        std::cout << "missing argument 1 : password";
        return 0;
    }
    std::string password = std::string(argv[1]);
    byte digest[SHA3_256::DIGESTSIZE];

    SHA3 digestAlgo = SHA3_256();
    std::cout << "going to calculate the digestn";
    digestAlgo.Update((const byte*) password.data(), password.size());
    std::cout << "updated...n";
    digestAlgo.Final(digest);
    std::cout << "calculated the digestn";

    char* b64encodedHash = (char*)malloc(sizeof(byte)*1000);
    encode(b64encodedHash, digest, sizeof(byte)*1000);

    std::cout << "password hashed : " << b64encodedHash << "n";

    return 1;
}
 

Когда я запускаю его, в командной строке выводится текст : «собираюсь рассчитать дайджест», и программа не продолжается. Он висит.
Кто-нибудь знает, почему ? Я пытаюсь следовать примерам в вики Crypto , и это очень похоже на их.
После последнего вызова я хочу, чтобы base64 закодировал дайджест, вы можете удалить эту часть, в ней используется файл заголовка boost.

Спасибо, С уважением

Ответ №1:

Измените строку

 SHA3 digestAlgo = SHA3_256();
 

Для

 SHA3_256 digestAlgo;
 

Комментарии:

1. Мне потребовалось несколько минут, чтобы это увидеть. Все было идеально, и не было причин начинать тяжелый бег, кроме переменной.