Skip to content

Commit e1e55c7

Browse files
committed
feat: bruteforce cipher key
1 parent ff14e64 commit e1e55c7

File tree

3 files changed

+33
-0
lines changed

3 files changed

+33
-0
lines changed

project/__main__.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from .crypt import encrypt, decrypt
22
from .utils import write_file
3+
from .crack import bruteforce
34
import argparse
45

56
parser = argparse.ArgumentParser(
@@ -22,13 +23,33 @@
2223
# -s & --source
2324
parser.add_argument('-sf', '--sourceFile', action='store_true')
2425

26+
# -b & --brute
27+
parser.add_argument('-br', '--bruteforce', nargs='+',
28+
metavar='PLAIN', help='Cipher text to crack', type=str)
29+
2530
args = parser.parse_args()
2631

2732

2833
def handle_args():
2934
# If key isn't in the args,
3035
if not args.key and (args.encrypt or args.decrypt):
3136
raise NameError("Key is not defined")
37+
# If the bruteforce flag used
38+
elif args.brute:
39+
c_value = ' '.join(args.brute)
40+
cracked = []
41+
if args.sourceFile:
42+
f = open(c_value, 'r').read()
43+
cracked = bruteforce(f)
44+
else:
45+
cracked = bruteforce(c_value)
46+
# Write to the file,
47+
# If an output path specified
48+
if args.output:
49+
write_file(cracked, args.output)
50+
else:
51+
for j in cracked:
52+
print(j)
3253
# If the encrypt flag used
3354
elif args.encrypt:
3455
# Extract key as an int from args

project/crack.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from .crypt import ALPHEBET, decrypt
2+
3+
def bruteforce(text):
4+
cracked = []
5+
for i in range(1, len(ALPHEBET)):
6+
cracked.append('Result with key ' + str(i) + ' ' + decrypt(text, i))
7+
return cracked

project/utils.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
from pathlib import Path
22

3+
34
def write_file(text, path):
45
f = Path(''.join(map(str, path)))
56
if f.exists():
67
raise OSError("File exists")
78
with f.open("w", encoding="utf-8") as f:
9+
if type(text) == list:
10+
for item in text:
11+
f.write("%s\n" % item)
12+
return
813
f.write(text)

0 commit comments

Comments
 (0)