Python script --- MD5/SHA256 sum

slackware | Σάβ, 09/08/2018 - 18:02 | 5' | 0

Καλησπέρα,

 

Όλοι ξέρουμε ότι τα αρχεία που κατεβάζουμε συνοδεύονται απο md5/sha1/sha256 sum με τα οποία μπορούμε να επαληθεύοσουμε ότι το αρχείο ή τα αρχεία τα οποία έχουμε κατεβάσει δεν είναι corrupt ή να τα έχει πειράξει κάποιος.

 

Για τον λόγο αυτό έφτιαξα ένα script σε python για να μπορέσω να ελέγχω ότι τα αρχεία είναι εντάξει.

Το script δέχεται σαν παραμέτρους τα sum αρχεία, όπως sha256sum.txt <filename>.sha256 MD5SUMS, md5.sum διαβάζει το hash και το όνομαα του αρχείου και στην συνέχεια δημιουργεί το hash απο το αρχείο και το συγκρίνει με αυτό που έχει το αρχείο .

 

Παράδειγμα:

[/home/masteryoda/Downloads/iso]
17:23:23-masteryodaVSsiva:-> python /home/masteryoda/Programm/Secure_Programming/Python/check_sum.py ~/Downloads/iso/sha256.sum
Verified  /home/masteryoda/Downloads/iso/linuxmint-19-mate-64bit-v2.iso

[/home/masteryoda/Downloads/iso]
17:23:58-masteryodaVSsiva:-> python /home/masteryoda/Programm/Secure_Programming/Python/check_sum.py ~/Downloads/iso/sha256.sum
Verified  /home/masteryoda/Downloads/iso/linuxmint-19-mate-64bit-v2.iso

 

Επίσης μπορείτε να το κατεβάσετε και απο το https://github.com/gekap/sumValidator

 

#!/usr/bin/python

import sys
import argparse
import hashlib
import os
import re


def usage():
    print """usage: check_sum [-h] [-version] filename

			positional arguments:
				filename    Accept md5 or sha256 sum file as parameter

			optional arguments:
				-h, --help  show this help message and exit
				-version    show program's version number and exit"""
    sys.exit()


def checkMD5():
    for key in saveOutput:
        getFile = saveOutput.get(key)
        if os.path.isfile(getFile) is False:
            continue

        return_md5 = hashlib.md5(open(getFile, 'rb').read()).hexdigest()
        if return_md5 in saveOutput.keys():
            print "Verified ",getFile
        else:
            print "Not verified ",getFile
	
	
def checkSHA256():
    for key in saveOutput:
        getFile = saveOutput.get(key)
        if os.path.isfile(getFile) is False:
            continue

        return_sha = hashlib.sha256(open(getFile, 'rb').read()).hexdigest()
        if return_sha in saveOutput.keys():
            print "Verified ",getFile
        else:
            print "Not verified ",getFile

def checkSingle(singleFile, ext):
    extens = ext
    getFileName = singleFile
    verified = ""
    return_sha = hashlib.sha256(open(getFileName, 'rb').read()).hexdigest()
    fullFileName = getFileName + extens
    with open(fullFileName) as f:
        for line in f:
            if return_sha in line:
                verified = True
                break
            else:
                verified = False

    if verified is True:
        print "Verified ", singleFile
    else:
        print "Not verified ", singleFile



getFileName = ""
saveOutput = {}
searchAsteriscDot = '*.'
searchAsterisc = '*'

parser = argparse.ArgumentParser(prog='check_sum')
parser.add_argument("file", metavar='filename', help="Accept md5.sum or sha256.sum as parameter")
parser.add_argument("-version", action='version', version='%(prog)s 0.1')
args = parser.parse_args()


if args.file:
    getFileName = args.file
if getFileName == "":
    usage()


FileName, Ext = os.path.splitext(getFileName)

if Ext == ".sha256":
    checkSingle(FileName, Ext)
    sys.exit()


path, fileName = os.path.split(getFileName)

if path == "":
    files = open(os.path.realpath(getFileName), "r")
    getFullPath = os.path.dirname(os.path.realpath(getFileName))
else:
    localFileName = path+"/"+fileName
    files = open(localFileName, "r")
    getFullPath = path + "/"
    getFileName = fileName
    #print "File: ",getFileName," Path: ",getFullPath

for line in files:
    x = line.split()
    fileName = x[0]
    checkSum = x[1]
    saveOutput[fileName] = checkSum


#Remove the *. or * from the fullpaths

for key, value in saveOutput.items():
    results = value.find(searchAsteriscDot)
    if results != "-1":
        cFileName = re.sub(r'^\*.', getFullPath, value)
        saveOutput[key] = cFileName

    return_asterisc = value.find(searchAsterisc)
    if return_asterisc != "-1":
        cFileName = re.sub(r'\*', getFullPath, value)
        saveOutput[key] = cFileName
		

sumFileName, sumExt = os.path.splitext(getFileName)


if sumExt == "" or sumExt == ".txt":
    searchSum = "sum"
    result = sumFileName.lower().find(searchSum)
    if result == 6:
        findHash = re.sub(r'sum', '', sumFileName.lower())
    elif result == 3:
        findHash = re.sub(r'sums', '', sumFileName.lower())
    else:
        findHash = sumFileName


if sumExt == ".sum":
    findHash = sumFileName

if findHash.lower() == "md5":
    checkMD5()
	
if findHash.lower() == "sha256":
    checkSHA256()

 

 

Δώσε αστέρια!

MO: 4.5 (ψήφοι: 2)