Demo Hash a File
This commit is contained in:
parent
4aa9d6299c
commit
1c00e051ef
|
@ -0,0 +1,103 @@
|
|||
#!Python 3
|
||||
import hashlib
|
||||
import PySimpleGUI as SG
|
||||
|
||||
#########################################################################
|
||||
# DisplayHash #
|
||||
# A PySimpleGUI demo app that displays SHA1 hash for user browsed file #
|
||||
# Useful and a recipe for GUI success #
|
||||
#########################################################################
|
||||
|
||||
# ====____====____==== FUNCTION compute_hash_for_file(filename) ====____====____==== #
|
||||
# Reads a file, computes the Hash #
|
||||
# ---------------------------------------------------------------------------------- #
|
||||
def compute_sha1_hash_for_file(filename):
|
||||
try:
|
||||
x = open(filename, "rb").read()
|
||||
except:
|
||||
return 0
|
||||
|
||||
m = hashlib.sha1()
|
||||
m.update(x)
|
||||
f_sha = m.hexdigest()
|
||||
|
||||
return f_sha
|
||||
|
||||
|
||||
# ====____====____==== FUNCTION compute_hash_for_file(filename) ====____====____==== #
|
||||
# Reads a file, computes the Hash #
|
||||
# ---------------------------------------------------------------------------------- #
|
||||
def compute_sha256_hash_for_file(filename):
|
||||
try:
|
||||
f = open(filename, "rb")
|
||||
x = f.read()
|
||||
except:
|
||||
return 0
|
||||
|
||||
m = hashlib.sha256()
|
||||
m.update(x)
|
||||
f_sha = m.hexdigest()
|
||||
|
||||
return f_sha
|
||||
|
||||
|
||||
# ====____====____==== Uses A GooeyGUI GUI ====____====____== #
|
||||
# Get the filename, display the hash, dirt simple all around #
|
||||
# ----------------------------------------------------------- #
|
||||
|
||||
# ---------------------------------------------------------------------- #
|
||||
# Compute and display SHA1 hash #
|
||||
# Builds and displays the form using the most basic building blocks #
|
||||
# ---------------------------------------------------------------------- #
|
||||
def HashManuallyBuiltGUI():
|
||||
# ------- Form design ------- #
|
||||
with SG.FlexForm('SHA-1 & 256 Hash', AutoSizeText=True) as form:
|
||||
form_rows = [[SG.Text('SHA-1 and SHA-256 Hashes for the file')],
|
||||
[SG.InputText(), SG.FileBrowse()],
|
||||
[SG.Submit(), SG.Cancel()]]
|
||||
(button, (source_filename, )) = form.LayoutAndShow(form_rows)
|
||||
|
||||
if button == 'Submit':
|
||||
if source_filename != '':
|
||||
hash_sha1 = compute_sha1_hash_for_file(source_filename).upper()
|
||||
hash_sha256 = compute_sha256_hash_for_file(source_filename).upper()
|
||||
SG.MsgBox( 'Display A Hash in PySimpleGUI', 'The SHA-1 Hash for the file\n', source_filename, hash_sha1, 'SHA-256 is', hash_sha256, LineWidth=75)
|
||||
else: SG.MsgBoxError('Display A Hash in PySimpleGUI', 'Illegal filename')
|
||||
else:
|
||||
SG.MsgBoxError('Display A Hash in PySimpleGUI', '* Cancelled *')
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------- #
|
||||
# Compute and display SHA1 hash #
|
||||
# This one cheats and uses the higher-level Get A File pre-made func #
|
||||
# Hey, it's a really common operation so why not? #
|
||||
# ---------------------------------------------------------------------- #
|
||||
def HashMostCompactGUI():
|
||||
# ------- INPUT GUI portion ------- #
|
||||
|
||||
rc, source_filename = SG.GetFileBox('Display A Hash Using PySimpleGUI',
|
||||
'Display a Hash code for file of your choice')
|
||||
|
||||
# ------- OUTPUT GUI results portion ------- #
|
||||
if rc == True:
|
||||
hash = compute_sha1_hash_for_file(source_filename).upper()
|
||||
SG.MsgBox('Display Hash - Compact GUI', 'The SHA-1 Hash for the file\n', source_filename, hash)
|
||||
else:
|
||||
SG.MsgBox('Display Hash - Compact GUI', '* Cancelled *')
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------- #
|
||||
# Our main calls two GUIs that act identically but use different calls #
|
||||
# ---------------------------------------------------------------------- #
|
||||
def main():
|
||||
# HashMostCompactGUI()
|
||||
HashManuallyBuiltGUI()
|
||||
|
||||
# ====____====____==== Pseudo-MAIN program ====____====____==== #
|
||||
# This is our main-alike piece of code #
|
||||
# + Starts up the GUI #
|
||||
# + Gets values from GUI #
|
||||
# + Runs DeDupe_folder based on GUI inputs #
|
||||
# ------------------------------------------------------------- #
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in New Issue