Come creare un programma che calcola il checksum di un file? Qual è l'esatto processo di calcolo di un checksum?
Come creare un programma che calcola il checksum di un file? Qual è l'esatto processo di calcolo di un checksum?
I checksum sono semplicemente numeri che aiutano a verificare che un particolare insieme di dati (un file, ad esempio) non sia cambiato dall'ultima volta che è stato controllato. Posso creare un messaggio qui, calcolare il checksum è 42, quindi inviarti il messaggio. Calcoli il checksum del messaggio che hai ricevuto e se ricevi anche lo stesso numero che ti ho detto (42), hai aumentato la certezza che i due messaggi sono identici. Diciamo che l'integrità del messaggio è stata preservata.
Ma i checksum sono operazioni matematiche, quindi come funzionano su cose come documenti word e lettere e immagini? Tieni presente che un file (o qualsiasi insieme di dati) è solo una raccolta di byte su un computer. Non importa se si tratta di un file di testo, di un foglio di calcolo o di un'immagine digitale, è solo una serie di byte. E tutti i byte sono solo numeri - significano solo cose come lettere e immagini quando usiamo programmi per visualizzarli in questo modo. (Alcune traduzioni comuni di testo a numeri che potresti aver sentito includono ASCII e Unicode.)
L'importante è che su un computer, qualsiasi file sia solo una serie di numeri. E questo è utile per far funzionare una somma di controllo.
La creazione del tipo più semplice di checksum può essere eseguita sommando letteralmente ogni byte di un file e stampando la somma totale di tutti i byte. Se ho un file contenente i cinque byte che rappresentano HELLO usando ASCII, il checksum che usa questo approccio semplice sarebbe 72 + 69 + 76 + 76 + 79 = 372.
Tuttavia, non è un ottimo checksum. Ricorda, vogliamo essere sicuri che il file non sia cambiato. Ma se riorganizzo quelle stesse lettere in una parola diversa, come HOLLE o OHELL, il checksum è ancora 372. Potrei persino sostituire le lettere con altre lettere che si sommano alla stessa somma. Quindi la maggior parte degli algoritmi di checksum fa qualcosa per prendere in considerazione l'ordine dei byte. Un semplice algoritmo di checksum in uso molto comune oggi è chiamato algoritmo Luhn . Usa un moltiplicatore che raddoppia ogni altro personaggio. Questi sono usati praticamente su ogni numero di conto della carta di credito per assicurarti che qualcuno non accidentalmente faccia un refuso quando inserisce il numero della carta di credito in un computer.
(Nel caso dell'algoritmo di Luhn, invece di dirti il checksum in un messaggio separato, una cifra aggiuntiva viene aggiunta al numero di conto per rendere il checksum dell'algoritmo uguale a zero. Chiunque voglia convalidare il credito il numero della carta è stato inserito correttamente, aggiunge tutte le cifre nel modo appropriato, utilizza la divisione modulo per 10 sulla somma e garantisce che il risultato sia zero.
Quindi è così che devi fare il tuo programma. Determina un algoritmo di checksum appropriato, leggi un file, calcola il checksum mentre vai, poi quando hai raggiunto la fine del file, stampa il checksum ed esci.
Con il checksum ti stai probabilmente riferendo all'hashing.
Le librerie di hash sono disponibili praticamente in ogni linguaggio di programmazione. A seconda di come vuoi usarlo, potresti usarlo anche in uno script di shell (bash o PowerShell per esempio).
Tutti loro fanno la stessa cosa. Prendi il tuo file come input e sputa l'hash. ad esempio, in uno script di shell:
md5sum myfile
sha25sum myfile
In python (una domanda simile qui su StackOverflow - guarda la risposta, non l'esempio nella domanda!):
import hashlib
myhash=hashlib.md5(open('path_to_myfile', 'rb').read()).hexdigest()
Leggi altre domande sui tag authentication hash md5 sha sha256