murilo ijanc'

Posts | CVS
Mail | PGP

SHA1 em C

Tenho trabalhado em um projeto no qual necessito criar hash de um determinado conteúdo. Basicamente uma função hash ela recebe um dado de qualquer tamanho e retorna outro dado de tamanho fixo.

No meu caso irei utilizar a função hash SHA1(3) que retorna 160bits, ou 20 bytes, por exemplo:

#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>

int
main(int argc, char *argv[])
{
		const uint8_t *dado = "127.0.0.1:1234";
		uint8_t hash[SHA_DIGEST_LENGTH];
		size_t tamanho_dado;

		tamanho_dado = 0;
		memset(hash, 0x0, sizeof(hash)); 

		tamanho_dado = strlen(dado);
		SHA1(dado, tamanho_dado, hash);
		
		printf("SHA1(%s) = ", dado);
		for (size_t i = 0; i < SHA_DIGEST_LENGTH; i++)
	   			printf("%02x", hash[i]);
		printf("\n");

		return (0);
} 

Agora basta compilar, como utilizo o OpenBSD o comando pode diferenciar caso você use linux.

$ cc hash.c -o hash -lcrypto # (linux) -lssl
$ ./hash
SHA1(127.0.0.1:1234) = 90f6505db61ecc6021beb7fec7ee16793d83c33a
$ sha1 -s "127.0.0.1:1234" # test
SHA1 ("127.0.0.1:1234") = 90f6505db61ecc6021beb7fec7ee16793d83c33a