Skip to content

Commit c0b47d6

Browse files
New cipher vigenere
1 parent 4c9ded9 commit c0b47d6

File tree

6 files changed

+57
-108
lines changed

6 files changed

+57
-108
lines changed

Algorithms/cryptology/ceasar_shifting_cipher/ceasar_shift_cipher.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,4 @@ def main():
5050
#print('Encrypted message: ' + cipher)
5151
#print('Decrypted message: ' + decrypted)
5252

53-
54-
main()
55-
56-
57-
58-
59-
60-
53+
main()

Algorithms/cryptology/hill_cipher/test.py

Lines changed: 0 additions & 25 deletions
This file was deleted.

Algorithms/cryptology/playfair_cipher/test.py

Lines changed: 0 additions & 25 deletions
This file was deleted.

Algorithms/cryptology/substitution_cipher/test.py

Lines changed: 0 additions & 25 deletions
This file was deleted.

Algorithms/cryptology/vigenere_cipher/test.py

Lines changed: 0 additions & 25 deletions
This file was deleted.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
'''
2+
Vigenère cipher is one of the simplest that employs a form of polyalphabetic substitution (each letter is assigned
3+
more than one substitute).
4+
5+
It was first described in 1553 but took an entire three centuries to break it in 1863.
6+
7+
Weakness: If someone finds key length then this can be broken.
8+
9+
Programmed by Aladdin Persson <aladdin.persson at hotmail dot com>
10+
* 2019-11-07 Initial programming
11+
12+
'''
13+
14+
15+
alphabet = 'abcdefghijklmnopqrstuvwxyz '
16+
letter_to_index = dict(zip(alphabet, range(len(alphabet))))
17+
index_to_letter = dict(zip(range(len(alphabet)), alphabet))
18+
19+
20+
def encrypt(message, key):
21+
encrypted = ''
22+
split_message = [message[i:i + len(key)] for i in range(0, len(message), len(key))]
23+
24+
for each_split in split_message:
25+
i = 0
26+
for letter in each_split:
27+
number = (letter_to_index[letter] + letter_to_index[key[i]]) % len(alphabet)
28+
encrypted += index_to_letter[number]
29+
i += 1
30+
31+
return encrypted
32+
33+
def decrypt(cipher, key):
34+
decrypted = ''
35+
split_encrypted = [cipher[i:i + len(key)] for i in range(0, len(cipher), len(key))]
36+
37+
for each_split in split_encrypted:
38+
i = 0
39+
for letter in each_split:
40+
number = (letter_to_index[letter] - letter_to_index[key[i]]) % len(alphabet)
41+
decrypted += index_to_letter[number]
42+
i += 1
43+
44+
return decrypted
45+
46+
def main():
47+
message = 'we attack tomorrow at noon'
48+
key = 'secret'
49+
encrypted_message = encrypt(message, key)
50+
decrypted_message = decrypt(encrypted_message, key)
51+
52+
# print('Original message: ' + message)
53+
# print('Encrypted message: ' + encrypted_message)
54+
# print('Decrypted message: ' + decrypted_message)
55+
56+
main()

0 commit comments

Comments
 (0)