Created
November 16, 2022 04:08
-
-
Save SharafatKarim/c00fb3c6c304fe84bf68f11b7b9ae9d5 to your computer and use it in GitHub Desktop.
Caesar Cipher and The Vigenère Cipher - encoder or decoder
This file contains hidden or 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
# Caesar Cipher! | |
def decoder(message, offset): | |
result="" | |
for i in range(len(message)): | |
if not(ord("a")<=ord(message[i])<=ord("z")): | |
result+=message[i] | |
continue | |
elif ord(message[i])+offset>ord("z"): | |
result += chr(ord(message[i])-26+offset) | |
continue | |
result += chr(ord(message[i])+offset) | |
return(result) | |
def coder(message, offset): | |
result="" | |
for i in range(len(message)): | |
if not(ord("a")<=ord(message[i])<=ord("z")): | |
result+=message[i] | |
continue | |
elif ord(message[i])-offset<ord("a"): | |
result += chr(ord(message[i])+26-offset) | |
continue | |
result += chr(ord(message[i])-offset) | |
return(result) | |
def fdecoder(text): | |
for i in range(26): | |
print("Offset: ", i) | |
print(decoder(text, i)) | |
print("\n") | |
return "Done!" | |
# The Vigenère Cipher | |
def index(st): | |
return ord(st)-ord('a') | |
def rindex(num): | |
return chr(num+ord('a')) | |
def vdcode(message, key): | |
long=[] | |
keyl= key*len(message) | |
for i in range(len(message)): | |
if not("a"<= message[i] <="z"): | |
long.append(" ") | |
continue | |
long.append(keyl[0]) | |
keyl= keyl[1:] | |
result="" | |
for i in range(len(message)): | |
if not("a"<= message[i] <="z"): | |
result += message[i] | |
continue | |
elif index(message[i])-index(long[i]) < 0: | |
result += rindex(index(message[i])-index(long[i])+26) | |
continue | |
result += rindex(index(message[i])-index(long[i])) | |
return result | |
def vcode(message, key): | |
long=[] | |
keyl= key*len(message) | |
for i in range(len(message)): | |
if not("a"<= message[i] <="z"): | |
long.append(" ") | |
continue | |
long.append(keyl[0]) | |
keyl= keyl[1:] | |
result="" | |
for i in range(len(message)): | |
if not("a"<= message[i] <="z"): | |
result += message[i] | |
continue | |
elif index(message[i])+index(long[i]) >= 26: | |
result += rindex(index(message[i])+index(long[i])-26) | |
continue | |
result += rindex(index(message[i])+index(long[i])) | |
return result | |
def text(text, choice): | |
print(f"Please Give me the {text} to {choice}") | |
return input("=> ") | |
def encode(): | |
message= text("text","encode") | |
print("Which encryption method do you want to use?") | |
print("1) Caesar Cipher") | |
print("2) Vigenère Cipher") | |
option = int(input("=> ")) | |
if option == 1: | |
offset= int(text("offset", "encode")) | |
print(coder(message, offset)) | |
elif option == 2: | |
key= text("key (word)", "encode") | |
print(vcode(message, key)) | |
else: | |
print("Please enter 1 or 2.") | |
encode() | |
def decode(): | |
message= text("text","decode") | |
print("Which encryption method do you want to use?") | |
print("1) Caesar Cipher") | |
print("2) Caesar Cipher (brute force - wihtout key)") | |
print("3) Vigenère Cipher") | |
option = int(input("=> ")) | |
if option == 1: | |
offset= int(text("offset", "encode")) | |
print(decoder(message, offset)) | |
elif option == 2: | |
fdecoder(message) | |
elif option == 3: | |
key= text("key (word)", "encode") | |
print(vdcode(message, key)) | |
else: | |
print("Please enter 1 or 2.") | |
encode() | |
def choice(): | |
option=0 | |
print("What do you want to do?") | |
print("1) encode") | |
print("2) decode") | |
option= int(input("=> ")) | |
print("Option ", option) | |
if option == 1: | |
encode() | |
elif option == 2: | |
decode() | |
else: | |
print("Please enter 1 or 2.") | |
choice() | |
choice() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment