# Cipher App This is a simple cipher app that features: - Caesar Cipher - Base64 Encoding/Decoding This is done using flask and python, with a simple html frontend and a Caesar Cipher python script. ### Usage ```bash # Install the requirements pip install -r requirements.txt # Run the app python app.py ``` ### File Locations All current and future cipher files will be located in the `Ciphers` folder. Web application files are located in root directory. ## Caesar Cipher The Caesar Cipher is a simple cipher that shifts the alphabet by a certain amount. For example, if the shift is 3, then A becomes D, B becomes E, and so on. This is done by using the `ord()` and `chr()` functions in python. What's different about this Caesar Cipher portion is the ability to include a One Time Pad (OTP) in the form of a `CSV` or `TXT` file. This fortifies the cipher by adding a predefined shift to the characters. The OTP looks like this: ```text 19 33 71 15 21 25 43 38 9 68 2 79 85 97 62 80 63 61 5 71 97 73 47 20 5 6 11 83 3 97 61 11 92 67 11 59 9 53 97 39 94 63 4 99 16 3 43 42 93 28 41 18 72 75 92 16 66 82 77 10 36 1 40 73 78 11 90 94 31 70 52 52 80 45 15 60 70 6 47 29 36 28 4 90 92 8 36 56 63 85 37 81 82 35 62 20 41 41 79 68 ``` Where each number is a shift value for each character in the message. The OTP will be generated and saved into both a `CSV` and `TXT` file if `use_pad` is set to `True` but no `file_name` or `file` is provided. This is done with `secrets` instead of `random` to ensure that the OTP is cryptographically secure. > Read more about `secrets` [here](https://docs.python.org/3/library/secrets.html#module-secrets) ### Usage of Caesar Cipher class ```python # Import the class from collections import deque text = "Hello World, this is a test!" # Pad Declaration using a list in a deque pad = deque([19, 33, 71, 15, 21, 25, 43, 38, 9, 68, 2, 79, 85]) cipher = CaesarCipher(40, use_pad=False) enc = cipher.encrypt(text) decipher = CaesarCipher(40, use_pad=False) dec = decipher.decrypt(enc) cipher2 = CaesarCipher(40, use_pad=True, file_name='./pad.txt') enc = cipher.encrypt(text) decipher2 = CaesarCipher(40, use_pad=True, file_name='./pad.txt') dec = decipher.decrypt(enc) ``` The Constructor allows for multiple parameters: - `shift` - The shift value for the cipher (Default in the Web Application is 3, no default in the class) - `pad` - `deque` object containing the OTP (Default is `None`) - `file_name` - The name of the file containing the OTP (Default is `None`) - `file` - The file containing the OTP (Default is `None`) - `use_pad` - Whether to use the OTP (Default is `False`) Above is the sample usage of the class. The object will have to be recreated for each message to be encrypted/decrypted since the OTP is a one time use. ## Base64 Encoding/Decoding Base64 is a way to encode binary data into a string format. This is done by splitting the binary data into 6-bit chunks and then converting each chunk into a character. This is done by using the `base64` module in python. The base64 encoding/decoding is done using the `base64` module in the web application. ## Web Application The web application is done using flask and python. The frontend is done using html and css. This is a simple web application that allows the user to encrypt/decrypt messages using the Caesar Cipher and Base64 Encoding/Decoding. Basic Functions: - Fields are automatically updated as the user types in the message. - The user can choose to use the OTP (via a file upload) - Sliders can be used to change the shift value for the Caesar Cipher - Both the Caesar Cipher and Base64 Encoding/Decoding can be used at the same time ### Launching the Web Application To launch the web application, run the `app.py` file. This will launch the web application on `localhost:5000`. ```bash python app.py ``` Ensure that the requirements in `requirements.txt` file is installed before running the application.