C program

Include comments next to each line of the program (C code)

Save Time On Research and Writing
Hire a Pro to Write You a 100% Plagiarism-Free Paper.
Get My Paper

Introductionto Programming

Save Time On Research and Writing
Hire a Pro to Write You a 100% Plagiarism-Free Paper.
Get My Paper

CS1325

Assignment #2 – Modified Caesar Cipher

Assignment 2 – Modified Caesar Cipher

Introduction

Your second assignment will consist of a decryption problem. Some encrypted text will be

provided and your job is to write a C program to decrypt it. As always, the C program should be

submitted as a standard C source code file.

Please note that the computer program should comply with the commenting and formatting rules

as described in class. For example, there should be a header for the whole program that gives the

author’s name, class name, date, and description. End braces should be commented, and there

are alignment and indenting requirements as discussed. Please ask if you have any questions.

Program 1: Modified Caesar Cipher

Basic Caesar Cipher

In cryptography, a Caesar Cipher is one of the simplest and most widely known encryption

techniques. It is a type of substitution cipher in which each letter in the plaintext is replaced by a

letter some fixed number of positions down the alphabet. For example, with a left shift of 3, D

would be replaced by A, E would become B, and so on. The method is named after Julius

Caesar, who used it in his private correspondence. (https://en.wikipedia.org/wiki/Caesar_cipher)

In a Caesar Cipher, the encryption is performed against a key string, which is often just the 26

letters of the alphabet. An offset value is defined that consists of a positive or negative integer.

The plaintext (the normal text) is encrypted, one letter at a time, by using that offset value in the

following way: (a) the index position within the key string of the letter to be encrypted is

determined, (b) the offset value is applied to that index in order to obtain a new index within the

key string, (c) the character at the new index is written as the cipher text.

For a simple example, let’s assume the key string consists of the 26 letters of the alphabet plus a

space:

https://en.wikipedia.org/wiki/Caesar_cipher

CS1325 – Introduction to Programming page: 2

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \0

Here we have the 26 letters of the English alphabet plus a space with their index positions listed

above. (To simplify, we’ll stick with all caps for the moment.) We want to encrypt the phrase “I

LOVE TO FLY” using an offset of +5. We get the following:

Plain text: I LOVE TO FLY

Cipher text: NEQT JEYTEKQC

Note that ‘I’ has an index of 8 within the key string. When we add 5 we get an index of 13,

which corresponds to the letter ‘N’, also within the key string. We then write down that letter as

the first character of the encrypted text. Similarly, the letter ‘Y’ has an index of 24. When we

add 5 we get 29, but since that index doesn’t exist within the array, we “wrap around” and

replace the ‘Y’ with a ‘C’. (Note that the ‘\0’ is not counted.)

To decrypt a message, we apply the offset value in reverse. If the offsets were added to produce

the cipher text, then they should be subtracted to reconstitute the plaintext.

Cipher text: NEQT JEYTEKQC
Plain text: I LOVE TO FLY

Here the plaintext is obtained from the cipher text by subtracting a constant offset of 5. Note that

with this technique, spaces are treated just like any other character. Note also that we did not

access the ASCII table in any way. All offsets are calculated within the key string only.

Modification of the Caesar Cipher

The basic Caesar Cipher has a characteristic that makes it relatively easy to break: every

character in the plain text is encoded with the same character in the cipher text. In the above

example, every space is encoded with an ‘E’. Since the space is the most commonly used

character, an observant reader could assume that a space is represented by an ‘E’ and determine

the offset from that.

A variation on the basic Caesar Cipher uses a variable offset, one that is different for each

character encoded. In this algorithm, the first character of the plain text will be encoded by some

firstOffset as above, the next character is encoded by (firstOffset+1), the next by (firstOffset+2),

etc. As you can see, the offsets grow sequentially from the first character of the plain text to the

last. This ensures that instances of a character in the plain text will be represented by different

characters in the cipher text.

Here is the above string encoded with a sequential offset that begins with 5. Notice that the “I”

is still encoded by “N”, but all of the other characters are different.

Plain text: I LOVE TO FLY

Cipher text: NFSWDOKEANUAO

CS1325 – Introduction to Programming page: 3

Here the “I” is encoded with an offset of 5, yielding a cipher text character “N”. The first space

is encoded with an offset of 6, yielding a cipher text character of “F”. The “L” is encoded with

an offset of 7, yielding a cipher text character of “S”, and so forth. Each character is encoded by

an offset 1 larger than the preceding character until the end of the plain text is reached.

Let’s apply the modified Caesar Cipher described above to a more complicated example. What

follows is the key string you can use to decrypt the cipher text.

Key String:
“hXTFexn39AJ6cmCYgktNuUwBdlKL04R1DSQrH y5q8VpjIZMGivEfasoWOb72zP“

The only characters in the key string are lower case alpha characters, upper case alpha

characters, digits from 0 to 9, and a space. Those characters have been jumbled up to make the

problem more difficult. The double quotes are used to mark the end of the key string; they are

not part of it.

The cipher text that you need to decrypt against that key string is:

Ciper text:

“yv uB8pTOAoVh6SrTdlWdq76pJceM3iFu5aSw O27L4pzkTAwkyEl”

Of necessity, all of the characters in the cipher text are contained in the key string. The

sequential offset values used to encrypt the plain text are positive and can begin with any number

between 1 and 60. (You should, therefore, apply negative sequential offsets to decrypt the cipher

text.)

Your mission (should you choose to accept it) is to (a) determine the initial offset value, (b) use

sequential offsets from that point to decrypt the above cipher text, and (c) do what it says.

Hints on the solution:

One possible way to solve this problem is to generate decryptions for all initial offsets from 1 to

60. Your output should look like the following, where “Offset” means “Initial Offset”:

Cipher Text: “yv uB8pTOAoVh6SrTdlWdq76pJceM3iFu5aSw O27L4pzkTAwkyEl”

Offset: 1; Result: GQgtrHOGPjRv2tNGnnHFtHvtMG5tqtQvxt2GPtutGiPgQtdHRvPr

Offset: 2; Result: HMSYkQrWMzp4i7ktMxxrTkrikZMyk5kSiek7MzkNkMGzYSkBr4izQ

Offset: 3; Result: rZDCgSQoZ2V0GbgkZeeQXgQGgIZ gygDGFgbZ2gtgZM2CDgwQ0G2S

Offset: 4; Result: QI1mYDSsI78LMOYgIFFShYSMYjIHY Y1MTYOI7YkYIZ7m1YUSLM7D

Offset: 5; Result: SjRcC1DajbqKZWCYjTTDPCDZCpjrCHCRZXCWjbCgCjIbcRCuDKZb1

Offset: 6; Result: ……

These are actual data, so you can use these to check your program. After the full list is

generated, visually scan through it to determine the offset and the plain text.

Second, the following functions might be useful to your solution:

CS1325 – Introduction to Programming page: 4

1. A function to determine the length of a C-string. Note that the ‘\0’ is not included in the
length calculation.

a. int strlen(char *); ()

2. A function to locate a character within a C-string and return its index value.
a. This function can be used to find a given character within the key string.

Finally, you can initialize a C-string with the key string and cipher text specified above by

copy/pasting those strings into your code, but here is an important point: never copy/paste from

a non-text file, like a PDF for example, directly into your code. Instead, copy/paste the text into

Notepad or Notepad++ first, then copy/paste into your code. This eliminates most of the

problems caused by hidden formatting characters and other issues.

Still stressed from student homework?
Get quality assistance from academic writers!

Order your essay today and save 25% with the discount code LAVENDER