mirror of
https://hub.njuu.cf/TheAlgorithms/Python.git
synced 2023-10-11 13:06:12 +08:00
create beaufort cipher (#3206)
* create beaufort cipher if you like my code, merge it and add the label as `hacktoberfest-accepted` * update the file * Update beaufort_cipher.py * Update beaufort_cipher.py * update as per black formatter * Update beaufort_cipher.py * update the file * update file * update file * update file * update file
This commit is contained in:
parent
f34434a214
commit
3bbec1db49
82
ciphers/beaufort_cipher.py
Normal file
82
ciphers/beaufort_cipher.py
Normal file
@ -0,0 +1,82 @@
|
||||
"""
|
||||
Author: Mohit Radadiya
|
||||
"""
|
||||
|
||||
from string import ascii_uppercase
|
||||
|
||||
dict1 = {char: i for i, char in enumerate(ascii_uppercase)}
|
||||
dict2 = {i: char for i, char in enumerate(ascii_uppercase)}
|
||||
|
||||
|
||||
# This function generates the key in
|
||||
# a cyclic manner until it's length isn't
|
||||
# equal to the length of original text
|
||||
def generate_key(message: str, key: str) -> str:
|
||||
"""
|
||||
>>> generate_key("THE GERMAN ATTACK","SECRET")
|
||||
'SECRETSECRETSECRE'
|
||||
"""
|
||||
x = len(message)
|
||||
i = 0
|
||||
while True:
|
||||
if x == i:
|
||||
i = 0
|
||||
if len(key) == len(message):
|
||||
break
|
||||
key += key[i]
|
||||
i += 1
|
||||
return key
|
||||
|
||||
|
||||
# This function returns the encrypted text
|
||||
# generated with the help of the key
|
||||
def cipher_text(message: str, key_new: str) -> str:
|
||||
"""
|
||||
>>> cipher_text("THE GERMAN ATTACK","SECRETSECRETSECRE")
|
||||
'BDC PAYUWL JPAIYI'
|
||||
"""
|
||||
cipher_text = ""
|
||||
i = 0
|
||||
for letter in message:
|
||||
if letter == " ":
|
||||
cipher_text += " "
|
||||
else:
|
||||
x = (dict1[letter] - dict1[key_new[i]]) % 26
|
||||
i += 1
|
||||
cipher_text += dict2[x]
|
||||
return cipher_text
|
||||
|
||||
|
||||
# This function decrypts the encrypted text
|
||||
# and returns the original text
|
||||
def original_text(cipher_text: str, key_new: str) -> str:
|
||||
"""
|
||||
>>> original_text("BDC PAYUWL JPAIYI","SECRETSECRETSECRE")
|
||||
'THE GERMAN ATTACK'
|
||||
"""
|
||||
or_txt = ""
|
||||
i = 0
|
||||
for letter in cipher_text:
|
||||
if letter == " ":
|
||||
or_txt += " "
|
||||
else:
|
||||
x = (dict1[letter] + dict1[key_new[i]] + 26) % 26
|
||||
i += 1
|
||||
or_txt += dict2[x]
|
||||
return or_txt
|
||||
|
||||
|
||||
def main():
|
||||
message = "THE GERMAN ATTACK"
|
||||
key = "SECRET"
|
||||
key_new = generate_key(message, key)
|
||||
s = cipher_text(message, key_new)
|
||||
print(f"Encrypted Text = {s}")
|
||||
print(f"Original Text = {original_text(s, key_new)}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import doctest
|
||||
|
||||
doctest.testmod()
|
||||
main()
|
Loading…
Reference in New Issue
Block a user