Como Gerar Hash Whirlpool com C++ e OpenSSL

A Galáxia do Redemoinho (M51) inspirou o nome do algoritmo, apesar da sua tradução ao pé da letra ser: hidromassagem.


Como Gerar Hash Whirlpool com C++ e OpenSSL


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 .


Utilizando com C++

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"

Links úteis


cpp openssl criptografia


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!