PDA

Visualizza la versione completa : Hash di un file ??


MatteoG.
12-12-2003, 12:00
Ciao ragazzi,

sto realizzando un programma che necessità dell'hashing di un file. Vi spiego.
Ho dei file originali di cui devo calcolare l'hash in base alla loro dimensione e al loro contenuto (soprattutto). Mi serve per vedere se tutti utilizzano quel file origianle e non "modificato", una specie di anti-cheat .

Esiste un algortimo per fare questo? Cioè calcolare l'hash in base al contentuo di un file ? Della serie se cambia un bit, cambia anche l'hash ? Se mi potete aiutere vi sarei molto grato. Ho visto degli algoritmi tipo Md5,SHA, SHA256. Possono andare bene per l'hashing di un file (del suo contenuto? Io credo di si ma vorrei la vostra conferma.

In teoria basterebbe aprire il file che voglio cryptare, passarlo tutto leggendomi il suo contenuto e alla fine cryptare tutto insieme. Ma questo non funziona per file molto grandi immagino, e soprattutto per file che non sono semplicemente di testo, l'apertura di un file exe ad esempio nn causerebbe problemi ?

Se qualcuno puoi chiarmi le idea :) Grazie, sarò debitore ! :mavieni:

P.s. Il programma sarà sviluppato in VB.NET

Yojimbo
12-12-2003, 20:55
md5 potrebbe essere stato rotto come codice di hash ma l'SHA è perfetto al momento. per quanto riguada gli exe non sò

MatteoG.
12-12-2003, 23:08
grazie per l'info. Sai dove posso trovare qualcosa al riguardo ? O sai per caso come si calcola l'hash di un file ? (non di una stringa di un intero file). E' tutto il giorno che cerco ma ancora niente :( :dhò:

Yojimbo
12-12-2003, 23:16
per farla di un file basta passare l'intera quantità dei dati attraverso l'algorimto, facendolo passare a blocchi cosi da evitare di caircarlo tutto in un colpo, meglio ancora se lo fai mappare virtualmente , cmq se vuoi del codice ho l'SHA e l'MD5 pronti all'uso,il primo in C e il secondo in C++ se li vuoi trovi la mia mail nel profilo

MatteoG.
13-12-2003, 10:01
Grazie Yojimbo per la disponibilità, per gli algoritmi non c'è problema gli ho già in versione C++ e VB (non .NET), però mi chiedevo come poterli applicare su un file. Apro il file e ogni riga la passo con l'MD5 .. ottengo cosi un codice hash di 128bit (output) metti che ho 100 righe, avrei 100 codici hash ... per farne uno solo univoco, che quel tipo di file ne abbia solo uno in tutto il mondo (esagero :)), sommo i 100codici hash (lo scrivo anche se è una cavolata perchè sommandoli la univocita se ne emigra...)? Hai qualche idea in proposito? Forse questo nei file testo si puo fare, ma è lo stesso con i file NON di testo ? Illuminami :)

Grazie ciao :ciauz:

Yojimbo
13-12-2003, 14:41
...per esempio, ti credi un buffer di 8192 byte, carichi il file nel buffer finche non è finito e inserisci il buffer nella funzine di trasformazione e solo alla fine dell'inserimento di tutti i dati. non capisco perchè parli sempre di righe..

MatteoG.
14-12-2003, 15:14
non saprei, credevo che l'md5 di potesse fare solo su stringhe ( da qui la lettura a righe del file), in che maniera creeresti tu il buffer ? Lo crei e poi lo passi alla funzione di md5 ?

Yojimbo
14-12-2003, 19:56
esempio che usa l'implementazioe che ho io dell'md5 (C++)



#include <stdio.h>
#include "md5.h"

int main( int argc, char **argv ) {
md5 hash;
char buff[4096];
unsigned char md5_hash[16];
int ret;

hash.init();
FILE *file = fopen(argv[1],"r");
if( file == NULL ) return -1;

do {
ret = fread(buff,4096,1,file);
if( ret == -1 ) return -1;
hash.add( buff, ret );
} while( ret == 4096 );

hash.get(md5_hash);
printf("%s -> %s\n",argv[1],md5_hash);

fclose(file);
}

MatteoG.
14-12-2003, 21:53
Grazie mille mi sei stato davvero d'aiuto :metallica :mavieni: !
Ciao :ciauz:

Loading