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…
x
Reference in New Issue
Block a user