Engee documentation
Notebook

The Caesar Cipher

The Caesar cipher is a very simple way to encrypt text, the authorship of which is attributed to the Roman commander Julius Caesar. The essence of the method is that each letter of the source text is replaced by another letter shifted by a certain number of positions in the alphabet.
This encryption method is very simple and easy to crack, so it's not used for serious information security these days. However, it is well suited to demonstrate the basic principles of encryption and can be used for educational purposes, as well as to show the possibilities of using standard symbol tables to work with indexes.

In this example, we will use the ASCII table to implement this algorithm. Let's define a function for encoding and decoding a string using a Caesar cipher.

In [ ]:
function caesar_cipher_encode_decode(text::String, shift::Int, code::Bool)
    encoded_text = Char[]
    # We go through each character in the string
    for char in text
        ascii_code = Int(char) # Converting a character to its index in ASCII

        # Defining a new ASCII code value depending on the type of operation (encoding or decoding)
        if code
            new_ascii_code = ascii_code + shift # If we encode, we add a shift to the current value of the ASCII code.
        else
            new_ascii_code = ascii_code - shift # If we decode, we subtract the shift from the current value of the ASCII code.
        end
        push!(encoded_text, Char(new_ascii_code)) # Convert the new ASCII code value back to a character and add it to the array.
    end
    return join(encoded_text) # We combine all the characters into a single string and return the result.
end
Out[0]:
caesar_cipher_encode_decode (generic function with 2 methods)
In [ ]:
# Example of using functions
plaintext = "Engee"
shift_amount = 3

ciphertext = caesar_cipher_encode_decode(plaintext, shift_amount, true)
println("Encoded Text: ", ciphertext)

decrypted_text = caesar_cipher_encode_decode(ciphertext, shift_amount, false)
println("Decoded Text: ", decrypted_text)
Encoded Text: Hqjhh
Decoded Text: Engee

Conclusion

As you can see, as a result of the transformations, we got the original word. This means that our function is working correctly.