Sto provando a scrivere un programma C che dimostri che SHA1 è quasi privo di collisioni, ma non riesco a capire come effettivamente creare l'hash per i miei valori di input. Ho solo bisogno di creare l'hash e memorizzare il valore esadecimale in un array. Dopo alcune ricerche su Google, ho trovato me dirigere utilizzare questa documentazione OpenSSL:Come utilizzare l'hashing SHA1 nella programmazione 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);
credo che dovrei essere utilizzando unsigned char * SHA1 o SHA1_Init, ma non sono sicuro di quello che sarebbero gli argomenti, dato x è il mio input da sottoporre a hash. Qualcuno potrebbe chiarire questo per me? Grazie.
Quali sono i valori di input: stringhe in memoria o contenuto del file? –
Sto scrivendo un attacco di compleanno che dovrebbe creare un nuovo hash e aggiungerlo alla fine ogni volta che rimuovo l'array. Stavo solo per mantenerlo semplice e ho cancellato il valore di i. Risposta rapida, in stringhe di memoria. – spassen
Cosa intendi con 'dimostrando che SHA1 è quasi privo di collisioni'? SHA1 è un hash di 160 bit, quindi ci sono 2^160 valori possibili, ma ci sono molto più di 2^160 possibili stringhe (diciamo più corte di 1MB), quindi ci sono tonnellate di collisioni. Se vuoi solo verificare se ottieni delle collisioni da un certo numero di stringhe generate casualmente, il numero di stringhe necessarie per una risposta a metà affidabile è troppo alto (a meno che non trovi una collisione in anticipo, ma SHA1 è testato abbastanza bene da assegnare quella una probabilità trascurabilmente piccola). –