Home

Search

C# Caesar Cipher

Implement a Caesar cipher using a static method. A Caesar cipher shifts letters.

Caesar cipher. A Caesar cipher shifts letters in a string. In this cipher, each letter is shifted a certain number of places in the alphabet. If the letter overflows, it begins again at the letter "a".

Example. The Caesar method receives a string value and an int that indicates the shift. The string is the input string. In the Caesar method, we convert the string to a char array with ToCharArray.ToCharArray
Shift: If the character goes above "z", we shift it back 26 places. If the character goes below "a", we shift it forward 26 places.
So: We apply the shift value to every character. This is correct for all lowercase letters.
Char
Info: We can see that this cipher is reversible. A call to Caesar(string, 18) can be reversed with a call to Caesar(string, -18).
Also: The example from Wikipedia can be solved with a call to Caesar(string, -4).
Caesar cipher: Wikipedia
C# program that implements Caesar cipher using System; class Program { /// <summary> /// Apply Caesar cipher with shift. /// </summary> static string Caesar(string value, int shift) { char[] buffer = value.ToCharArray(); for (int i = 0; i < buffer.Length; i++) { // Letter. char letter = buffer[i]; // Add shift to all. letter = (char)(letter + shift); // Subtract 26 on overflow. // Add 26 on underflow. if (letter > 'z') { letter = (char)(letter - 26); } else if (letter < 'a') { letter = (char)(letter + 26); } // Store. buffer[i] = letter; } return new string(buffer); } static void Main() { string a = "test"; string b = Caesar(a, 18); // Ok string c = Caesar(b, -18); // Ok string d = Caesar(a, 1); // Ok string e = Caesar(d, -1); // Ok string f = "exxegoexsrgi"; string g = Caesar(f, -4); // Ok Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c); Console.WriteLine(d); Console.WriteLine(e); Console.WriteLine(f); Console.WriteLine(g); } } Output test lwkl test uftu test exxegoexsrgi attackatonce

Numeric characters. What happens with numeric (or non-letter) characters in the cipher? The Wikipedia article does not specify how numbers should be treated. It would be simple to ignore them.
Also: Another option would be to throw an exception if a number is found. Callers of Caesar would have to be prepared for this.
Exception

Summary. The Caesar cipher is a substitution cipher that shifts letter positions. It is similar to the ROT13 cipher. One benefit to this cipher is the shift value can be kept secret to slightly improve security.
Note: This sort of cipher will not prevent any determined hackers from unencrypting your data.
However: You could use the Caesar cipher and then an actual encryption algorithm on top of that.

Home
© 2007-2020 Sam Allen. Send bug reports to info@dotnetperls.com.