Caesar cipher is the simplest and oldest substitution cipher. It is a fundamental part of cryptography. In this project, we shall understand the cipher, view its features and implement it.
The cipher is created by assigning a numerical value is to each alphabet like so. A-0, B-1,..., Z-25. The algorithm can be expressed as follows:
C = E(key, p) = (key + p)mod26.
where C = Cipher Text, E = encryption, p = plain text
Each letter of the plain text is replaced by a corresponding letter standing 'key' paces away. For example, for the plaintext p = meet me after the party, and for a key = 3, the cipher text C would be = PHHW PH DIWHU WKH SDUWB.
Key points:
1. The alphabet is wrapped around. Thus the letter following Z is A.
2. It is an easy cipher to break as there are only 25 possibilities even for a Brute Force Attack.
3. It does not have an equivalent for numeric values and special characters.
4. Crypt analysis is overtly easy as the alphabets in the language have a certain frequency of being used. For example, e is the most commonly used alphabet in the English language.
The code has been explained in detail in the comments present within it.
#Take input PT (plain text) and the key from the user. ip = input("Enter plain text:") key = input("Enter the key: ") key = int(key) #Since the key can be any number, and we need to restrict it between 0-25, take its mod value.The key must be a positive integer value. key = key % 26 #print("Your new key is ", key) #Create a dictionary with key-value pairs like so. #The dictionary, alphabets has Alphabets as keys and the numbers as values. alphabets = {'A': '0', 'B': '1', 'C': '2', 'D': '3', 'E': '4', 'F': '5', 'G': '6', 'H': '7', 'I': '8', 'J': '9', 'K': '10', 'L': '11', 'M': '12', 'N': '13', 'O': '14', 'P': '15', 'Q': '16', 'R': '17', 'S': '18', 'T': '19', 'U': '20', 'V': '21', 'W': '22', 'X': '23', 'Y': '24', 'Z': '25'} #The seccond dictionary basically reverses the first one. Thus the keys are now numbers and values are now alphabets. This is used in the second half of the program. rev_dict_alphabets = {value:key for (key, value) in alphabets.items()} cipher_text = [] #Create an empty list that will be used to store the encoded plain text. ip = ip.upper() #converts the entire input into uppercase as python is case sensitive. for word in ip: ip.split() #print(word) def split(ip): return [char for char in ip] #print(split(ip)) #It splits all the words in the sentence into alphabetic form. for alpha in split(ip): h = alpha for x in alphabets: if x == h: #print(x) part1 = alphabets[x] part1 = int(part1) newval = key + part1 newval = int(newval) #print(newval) --- Find the alphabets in the input in the dictionary alphabets. Add the key to their ccorresponding value. #The Caesar cipher is a rotating cipher. Thus if the newval exceeds 25 then it must start at 0 again. if newval <= 25: p = newval else: p = newval - 26 #Usin the reversed dictionary, we find the alphabets corresponding to the number generated in p. for y in rev_dict_alphabets: y = int(y) if y == p: #print(y) y = str(y) part2 = rev_dict_alphabets[y] #print("Value corresponding to the alphabet is ", part1 ) #print("The corresponding alphabet to the new value is ", part2) cipher_text.append(part2) #Add the alphabets of the cipher text to their list, join them into a string and print it. CT = ''.join(cipher_text) print(CT)
Submitted by Vishaka Iyengar (reachvishakas)
Download packets of source code on Coders Packet
Comments