Estoy intentando escribir un programa C que pruebe que SHA1 está casi libre de colisiones, pero no puedo encontrar la manera de crear realmente el hash para mis valores de entrada. Solo necesito crear el hash y almacenar el valor hexadecimal en una matriz. Después de algunas búsquedas de Google, he encontrado la de OpenSSL orientarme a utilizar esto:Cómo usar el hash SHA1 en la programación C
#include <openssl/sha.h>
unsigned char *SHA1(const unsigned char *d, unsigned long n,
unsigned char *md);
int SHA1_Init(SHA_CTX *c);
int SHA1_Update(SHA_CTX *c, const void *data,
unsigned long len);
int SHA1_Final(unsigned char *md, SHA_CTX *c);
creo que debería estar utilizando ya sea sin firma SHA1 char * o SHA1_Init, pero no estoy seguro de lo que serían los argumentos, dado x es mi entrada para ser hash. ¿Alguien podría aclarar esto por mí? Gracias.
¿cuáles son sus valores de entrada: cadenas en memoria, o el contenido del archivo? –
Estoy escribiendo un ataque de cumpleaños que debería crear un hash nuevo y lo agrega al final cada vez que paso por la matriz. Simplemente iba a mantenerlo simple y calcular el valor de i. Respuesta rápida, en cadenas de memoria. – spassen
¿Qué quiere decir con 'probar que SHA1 está casi libre de colisiones'? SHA1 es un hash de 160 bits, por lo que hay 2^160 valores posibles, pero hay mucho más de 2^160 cadenas posibles (digamos más corto que 1MB), por lo que hay toneladas de colisiones. Si solo desea probar si obtiene colisiones de varias cadenas generadas aleatoriamente, la cantidad de cadenas necesarias para una respuesta a medio camino confiable es demasiado alta (a menos que encuentre una colisión antes, pero SHA1 se prueba lo suficientemente bien como para asignar esa una probabilidad insignificantemente pequeña). –