-
Notifications
You must be signed in to change notification settings - Fork 108
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #213 from school-brainhack/update_python_scripts_i…
…ssue#183 update python scripts module
- Loading branch information
Showing
4 changed files
with
104 additions
and
149 deletions.
There are no files selected for viewing
52 changes: 35 additions & 17 deletions
52
content/en/modules/python_scripts/correction/cypher_script.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,40 @@ | ||
#!/usr/bin/env python | ||
import argparse | ||
import os | ||
from useful_functions import encrypt_letter, decrypt_letter, process_message | ||
from useful_functions import process_message | ||
|
||
|
||
def main(input_path, key, mode, output_path): | ||
with open(input_path, "r") as message_file: | ||
message = message_file.read() | ||
encrypt = mode == "encryption" | ||
processed_message = process_message(message, key, encrypt) | ||
with open(output_path, "w") as out_file: | ||
out_file.write(processed_message) | ||
|
||
|
||
if __name__ == "__main__": | ||
parser = argparse.ArgumentParser() | ||
parser.add_argument("--message", type=str, help="Path to the text file containing the message \ | ||
to be encrypted or decrypted.") | ||
parser.add_argument("--key", type=str, help="Key to use to encrypt or decrypt the message.") | ||
parser.add_argument("--mode", type=str, choices=["enc", "dec"], help="whether to encrypt ('enc') \ | ||
or decrypt ('dec') the message.") | ||
parser.add_argument( | ||
"-i", | ||
dest="input_path", | ||
type=str, | ||
required=True, | ||
help="Path to the input file.", | ||
) | ||
parser.add_argument( | ||
"-o", | ||
dest="output_path", | ||
type=str, | ||
required=True, | ||
help="Path to the output file.", | ||
) | ||
parser.add_argument("-k", dest="key", type=str, required=True, help="Key.") | ||
parser.add_argument( | ||
"-m", | ||
dest="mode", | ||
type=str, | ||
required=True, | ||
choices=["encryption", "decryption"], | ||
help="Wether to encrypt or decrypt the message.", | ||
) | ||
args = parser.parse_args() | ||
|
||
with open(args.message, 'r') as f: | ||
message = f.read() | ||
encrypt = args.mode == "enc" | ||
processed_message = process_message(message, args.key, encrypt) | ||
suffix = "_encrypted" if encrypt else "_decrypted" | ||
save_path = os.path.splitext(args.message)[0] + suffix + ".txt" | ||
with open(save_path, 'w') as f: | ||
f.write(processed_message) | ||
main(args.input_path, args.key, args.mode, args.output_path) |
53 changes: 40 additions & 13 deletions
53
content/en/modules/python_scripts/correction/useful_functions.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,20 +1,47 @@ | ||
def encrypt_letter(msg, key): | ||
enc_id = (ord(msg) + ord(key)) % 1114112 | ||
return chr(enc_id) | ||
def encrypt_letter(letter, key): | ||
letter_index = ord(letter) | ||
key_index = ord(key) | ||
new_index = (letter_index + key_index) % 1114112 | ||
return chr(new_index) | ||
|
||
|
||
def decrypt_letter(msg, key): | ||
dec_id = (1114112 + ord(msg) - ord(key)) % 1114112 | ||
return chr(dec_id) | ||
def decrypt_letter(letter, key): | ||
letter_index = ord(letter) | ||
key_index = ord(key) | ||
new_index = (letter_index - key_index) % 1114112 | ||
return chr(new_index) | ||
|
||
|
||
def process_message(message, key, encrypt): | ||
returned_message = "" | ||
|
||
processed_message = "" | ||
process_letter = encrypt_letter if encrypt else decrypt_letter | ||
for i, letter in enumerate(message): | ||
if encrypt: | ||
returned_message += encrypt_letter(letter, key[i%len(key)]) | ||
else: | ||
returned_message += decrypt_letter(letter, key[i%len(key)]) | ||
key_letter = key[i % len(key)] | ||
processed_key = process_letter(letter, key_letter) | ||
processed_message += processed_key | ||
|
||
return processed_message | ||
|
||
|
||
if __name__ == "__main__": | ||
# Test 1 | ||
test_letter = "l" | ||
test_key = "h" | ||
decrypted_letter = decrypt_letter(encrypt_letter(test_letter, test_key), test_key) | ||
|
||
if test_letter == decrypted_letter: | ||
print("first test passed") | ||
else: | ||
print("first test failed") | ||
|
||
# Test 2 | ||
message = "word" | ||
key = "key" | ||
|
||
encrypted_msg = process_message(message, key, encrypt=True) | ||
decrypted_msg = process_message(encrypted_msg, key, encrypt=False) | ||
|
||
return returned_message | ||
if decrypted_msg == message: | ||
print("second test passed") | ||
else: | ||
print("second test failed") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
á ám á ï õì î Ûu § £Ï Ñ¡ Óʦ§Û} Ù ¿ §õi Ñï á~ õä Ï Ôç ªá| Á ÌÕÒ ¢ õwÒ ÃÒ Ø´¾ÒÔ ß| ÅÓÅ ÅÕªñz ¡¿ ¯ ço´ ¡¦¦² ïoß Å¿ ð Û}Ñ ÌÄѾ ði§ ¿Ï² îiÏÄÒ¡§§¾ ¨ é ð¿ ¡îo î ÃÓ¾Ù§ìo éãÆæ Ó ß á î ³Ù îám³×èÍÞ·èÀá·²çÆÕÝo |