No artigo anterior nós mostramos como gerar Hash com MD5, assim como descrito lá, os conceitos serão semelhantes.
Whirlpool (às vezes denominado WHIRLPOOL ) é uma função hash criptográfica baseada em uma cifra de bloco tipo AES .
Ele gera uma hash de comprimento de 128 caracteres .
Para esse exemplo, vamos criar a hash da palavra Terminal Root . Segue o código abaixo:
whirlpool.cpp
#include <iostream>
#include <iomanip>
#include <sstream>
#include <openssl/whrlpool.h>
std::string whirlpool(const std::string &str){
unsigned char hash[WHIRLPOOL_DIGEST_LENGTH];
WHIRLPOOL_CTX whirlpool;
WHIRLPOOL_Init(&whirlpool);
WHIRLPOOL_Update(&whirlpool, str.c_str(), str.size());
WHIRLPOOL_Final(hash, &whirlpool);
std::stringstream ss;
for(int i = 0; i < WHIRLPOOL_DIGEST_LENGTH; i++){
ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>( hash[i] );
}
return ss.str();
}
int main() {
std::cout << whirlpool("Terminal Root") << '\n';
return 0;
}
Para compilar rode:
g++ whirlpool.cpp -lcrypto
A possível e esperada saída será:
edef01c730c67430584283292a59e3a6e910ecf7c903c0b1040243498c67053a849c0eacc07dfdbd76be36d2d1e50eaa0e0b6324f96743828eccdf8dac471891
Para verificar se está correta use, preterivelmente, o comando rhash
com os seguintes argumentos:
rhash --whirlpool -m "Terminal Root"