Καλησπέρα,
Όλοι ξέρουμε ότι τα αρχεία που κατεβάζουμε συνοδεύονται απο 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()
- Συνδεθείτε ή εγγραφείτε για να σχολιάσετε