TheDeveloperBlog.com

Home | Contact Us

CSharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript

C# Caesar Cipher

This C# example program implements a Caesar cipher using a static method.

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'.

Ciphers: Other ciphers are similar to the Caesar cipher. All these algorithms are easy to figure out.

ROT13Atbash

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

Next, we apply the shift value to every character. If the character goes above 'z', we shift it back 26 places. If the character goes below 'a', we shift it forward 26 places. This is correct for all lowercase letters.

Char

Based on:

.NET 4

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

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

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.