Pypthon

Aus Meine persönliche Wissensdatenbank
Zur Navigation springen Zur Suche springen

Programme

Shebang für Python-Programme:

#!/usr/bin/env python3

SHA256-Checksummen-Checker

Keine besondere Erfinderhöhe. Daher ohne Copyright, sondern Freeware.

Problem: Wenn man im Internet Dateien zum Download angeboten bekommt, kann man die Datenintegrität oft anhand eines angezeigten SHA256-Hashes überprüfen. Dazu existieren unter allen Betriebssystemen Shell-Tools, um den Hasch einer Datei zu berechnen.

Unter Linux:

sha256sum

Das Resultat kann man dann mit dem auf der Webseite vorgegebenen Hash-String vergleichen. Das finde ich eher mühsam; warum kann man den Hash nicht gleich mit prüfen? Für GTK gibt es diverse Tools und einige können auch die Vorgabe gleich mit prüfen. GTK finde ich aber übertrieben. Das kann gern in der Konsole laufen.

Die schafft mein kleines Progrämmchen shc.py (sha256-check):

#!/usr/bin/env python3
import hashlib
import sys

version 		= '\nSHA256-Checker version 0.1 Free and open source software\n'
helptext		= "Help: run parameters are: filename expected-sha256-string\n"
txt_color_gn	= "\033[0;32m" # green colored text
txt_color_rd 	= "\033[0;31m" # red colored text
txt_color_wt	= "\033[0;0m"  # white colored text (default)

def calculate_sha256(filename, chunk_size=65536):
    sha256 = hashlib.sha256()
    with open(filename, 'rb') as f:
        while True:
            data = f.read(chunk_size)
            if not data:
                break
            sha256.update(data)
    return sha256.hexdigest()

# probe reading parameters
try:
    filename = sys.argv[1]
    hashvalue= sys.argv[2]
except IndexError:
    # in case of index error, print helpstring and exit
    print(version, "\n", helptext, sep='') # sep='' prevents leading space in output line
    sys.exit() # program ends here

hashresult=calculate_sha256(filename)
if hashresult== hashvalue:
    print(version, txt_color_gn, "\nCheck OK:" ,hashresult) # output text in green
else:
    print(version, txt_color_rd, "\nCheck fail! Calculated result:\n", hashresult, sep='') # output text in red

print(txt_color_wt, "\nDone.\n") # regular end of program

Ein Start ohne Parameter zeigt an, welche Parameter nötig sind und bricht dann ab:

  1. Parameter: zu prüfende Datei
  2. Parameter: erwarteter sha256-String

Vor Anwendung unter Linux:

chmod +x shc.py

Um es ausführbar zu machen.