2016-06-14 7 views
0

Ich habe es geschafft, einen Code zur Berechnung der Datei-Prüfsumme zu erstellen. Unten ist der Code:Python String Checksum Rechner

from Crypto.Hash import * 

def get_file_checksum(filename): 
    h = SHA384.new() 
    chunk_size = 8192 
    with open(filename, 'rb') as f: 
     while True: 
      chunk = f.read(chunk_size) 
      if len(chunk) == 0: 
       break 
      h.update(chunk) 
    return h.hexdigest() 

Jetzt dachte ich an eine andere Funktion, um die Prüfsumme einer gegebenen Zeichenfolge zu berechnen. Hier ist der Code

def get_string_checksum(string): 
    h = SHA384.new() 
    h.update(string) 
    return h.hexdigest() 

Das Problem, das ich mit Blick auf bin, ist, dass die Ausgabe der Zeichenfolge Prüfsumme nicht, dass der Inhalt der Datei entspricht.

Für eine bestimmte Datei auf meinem System bekomme ich diese Werte

get_file_checksum(filename) erhalten:

d57eec87df9c5ec33baab34be4ac7695a59d80779d10e8920640fac62f4bfa2b0da0cef0b0d7d6d1e16cae5ca560cd95 

get_string_checksum(string) erhalten:

18044418f40f12e9601d0f15a7da46c114779ac337fd8fe513a122e2aa95a9b5e05d6b00d46d0682c0054c5f2b3355c0 

Die Zeichenfolge, die ich verwendet ein Argument ist genauso wie der Inhalt der Datei.

Ich verwende diese Website, um die Prüfsummen zu überprüfen: https://defuse.ca/checksums.htm#checksums

Gibt es etwas falsch mit get_string_checksum(string)?

+2

prüfen neue Linie Hinter. Es würde die Ergebnisse völlig anders machen. – Anonymous

+0

@jonrsharpe Danke für eine schnelle Antwort. Ich habe sowohl die Datei als auch die Zeichenfolge überprüft, es gibt keine leere neue Zeile. Ich habe sogar den Code mit dem 'strip()' z. 'h.update (string.strip())' und 'h.update (chunk.strip())' aber die Ergebnisse sind immer noch unterschiedlich. Allerdings passiert etwas Seltsames. Wenn ich die Länge des Inhalts der Datei und die Länge des Strings kurz vor 'h.update (string.strip()) 'ausdrucke, erwarte ich, dass die String-Längen gleich sind, aber auch unterschiedlich sind. – Drmaposa

+0

Sie ergeben unterschiedliche Prüfsummen, weil Sie die Zeichenfolgen aus dem Speicher eingeben. Versuchen Sie, die Zeichenfolge aus derselben Datei zu lesen. – wind85

Antwort

0

Streifen aus dem weißen Raum in der Datei Lesefunktion wie:

def get_file_checksum(filename): 
    h = SHA384.new() 
    chunk_size = 8192 
    with open(filename, 'rb') as f: 
     while True: 
      chunk = f.read(chunk_size).strip() 
      if not chunk: 
       break 
      h.update(chunk) 
    return h.hexdigest()