-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhashme.py
More file actions
98 lines (86 loc) · 3.02 KB
/
hashme.py
File metadata and controls
98 lines (86 loc) · 3.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import argparse
import pyfiglet
import pyperclip
from utils import generate_hash_sha256, verify_hash, generate_verifile, verify_file, verify_folder, generate_folder
from constants import MD5, SHA256, UTF8
def main():
desc_str = pyfiglet.figlet_format("Hash Me", font="Slant")
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
description=desc_str,
epilog="Simple utility to generate hashes and verify files with them.")
subparser = parser.add_subparsers(dest='command')
cli = subparser.add_parser('cli')
verifile = subparser.add_parser('verifile')
verifolder = subparser.add_parser('verifolder')
cli.add_argument('file', help="file to generate hash for or verify")
cli.add_argument('-a',
'--algo',
choices=[MD5, SHA256],
help="specifies hashing algorithm, default is MD5")
cli.add_argument('-v',
'--hash',
help="provide hash value for specified algorithm")
cli.add_argument('-c',
'--clipboard',
action='store_true',
help="copies hash value(s)to clipboard")
verifile.add_argument('file', help="file to generate verifile for")
verifile.add_argument('-v',
'--verify',
action='store_true',
help="toggle verify mode")
group = verifolder.add_mutually_exclusive_group()
group.add_argument('-p',
'--path',
help="path to directory")
group.add_argument('-v',
'--verify',
action='store_true',
help="toggle verify mode")
args = parser.parse_args()
if args.command == 'cli':
if args.hash: #hash value is present; md5 is default
print(verify_hash(args.file, MD5, args.hash))
elif args.algo: #algo is specified but no hash value
print(f"MD5: {generate_hash_md5(args.file)}") if args.algo == MD5 else print(f"SHA256: {generate_hash_sha256(args.file)}")
if args.clipboard:
clip_str = f"{generate_hash_md5(args.file)}" if args.algo == MD5 else f"{generate_hash_sha256(args.file)}"
pyperclip.copy(clip_str)
pyperclip.paste()
print("Hash copied to clipboard.")
else: #file will always be there
md5_hash = generate_hash_md5(args.file)
sha256_hash = generate_hash_sha256(args.file)
print(f"MD5: {md5_hash}\nSHA256: {sha256_hash}")
if args.clipboard:
pyperclip.copy(f"MD5: {md5_hash}\nSHA256: {sha256_hash}")
pyperclip.paste()
print("Hashes copied to clipboard.")
elif args.command == 'verifile':
if args.verify:
try:
verify_file(args.file)
except FileNotFoundError as e:
print(e)
else:
try:
generate_verifile(args.file)
except BaseException as e:
print(e)
elif args.command == 'verifolder':
if args.verify:
try:
verify_folder()
print("Finished checking all files.")
except:
print("Some error has occured. Please make sure you have relevant permissions to read.")
else:
#try:
generate_folder(args.path)
#print("Verifolder with files successfully generated.")
#except:
#print("Some error has occured. Please make sure you have relevant permissions to write.")
#main
if __name__ == '__main__':
main()