Como Gerar Hash SHA256 com C++ e OpenSSL

Existem outras bibliotecas que podem fazer a mesma coisa, mas a OpenSSL é a mais largamente utilizada principalmente para códigos escritos em C++ e C.


Como Gerar Hash SHA256 com C++ e OpenSSL

OpenSSL é uma biblioteca de software para aplicativos que protegem as comunicações em redes de computadores contra espionagem ou necessidade de identificar a parte na outra extremidade. É amplamente utilizado por servidores da Internet , incluindo a maioria dos sites HTTPS .

Uma função Hash é qualquer função que pode ser usada para mapear dados de tamanho arbitrário para valores de tamanho fixo. Os valores são geralmente usados para indexar uma tabela de tamanho fixo chamada de tabela hash . Nós falamos mais sobre Hash nesse vídeo: O que é e como gerar uma HASH ? .

SHA-2 ( Secure Hash Algorithm 2 ) é um conjunto de funções criptográficas de hash projetado pela Agência de Segurança Nacional dos Estados Unidos (NSA) e publicado pela primeira vez em 2001.

SHA-2 inclui mudanças significativas em relação ao seu antecessor, SHA-1 . A família SHA-2 consiste em seis funções hash com resumos (valores hash) que são 224, 256, 384 ou 512 bits: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA -512/256.


Instalando a biblioteca OpenSSL

Antes de qualquer coisa você precisa instalar a biblioteca OpenSSL, use o gerenciador de pacotes da sua distro para isso, exemplo para sistemas que usam APT:

Observação: Geralmente, a maioria dos sistemas já possuem essa biblioteca instalada.

sudo apt install libssl-dev

Utilizando com C++

Existem outras bibliotecas que podem fazer a mesma coisa, mas a OpenSSL é a mais largamente utilizada principalmente para códigos escritos em C++ e C.

Para esse exemplo, vamos criar a hash da palavra Terminal Root .

nvim crypto.cpp

#include <iostream>
#include <iomanip>
#include <sstream>
#include <openssl/sha.h>

std::string sha256(const std::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);

  std::stringstream ss;

  for(int i = 0; i < SHA256_DIGEST_LENGTH; i++){
    ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>( hash[i] );
  }
  return ss.str();
}

int main() {
  std::cout << sha256("Terminal Root") << '\n';
  return 0;
}

Para compilar use:

g++ -I/usr/include/openssl/ crypto.cpp -lcrypto

A saída será:

c01dcc1559af39e445c88200a485f01827a662ff4d03d626593e4792489a32e1

Que é a palavra Terminal Root criptografada.


Conferindo se a Hash está correta

Não use o comando echo 'Terminal Root' | sha256sum porque o echo possui um \n.

Use o printf se quiser comparar pelo terminal, exemplo:

printf "Terminal Root" | sha256sum

Você também pode conferir se a hash gerada está realmente correta utilizando algum serviço online, exemplo o site: https://emn178.github.io/online-tools/sha256.html . Acesse o site e escreva a palavra que deseja no campo que tem a palavra Input, no campo abaixo desse mostrará a hash SHA256 .


Links úteis


openssl criptografia cpp


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!