Table of Contents

Project: SECRET AGENT

A project for COURSENAME by YOUR NAME during the SEMESTER YEAR.

This project was begun on DATE and is anticipated to take TIME UNIT to complete. Project was completed on MONTH DAY, YEAR.

Objectives

State the purpose of this project. What is the point of this project? What do we hope to accomplish by undertaking it?

Prerequisites

In order to successfully accomplish/perform this project, the listed resources/experiences need to be consulted/achieved:

Background

State the idea or purpose of the project. What are you attempting to pursue?

Upon approval, you'll want to fill this section out with more detailed background information. DO NOT JUST PROVIDE A LINK.

Providing any links to original source material, such as from a project page, is a good idea.

You'll want to give a general overview of what is going to be accomplished (for example, if your project is about installing a web server, do a little write-up on web servers. What is it, why do we need one, how does it work, etc.)

Scope

This project will test your familiarity with more involved algorithms, storage, and control structures.

Encoding is the process of converting a message into a coded form.

Decoding is the reverse- retrieving that original message from an encoded form.

In this project you will write a 2 programs: one that will take a plain text message and convert it into a coded form (largely indecipherable to the regular english expecting eye) using a given cipher key, and another that will reverse the process (or decipher), when given the appropriate key.

The key is a numeric used to rotate the alphabet a set amount. Where A would normally equal 1, and Z 26, using a cipher key of 1 to shift 1 position to the right; A would now equal 2 (or B), B is now 3 (or C), and Z would be 1 (A).

Your encoding program can operate as follows:

The decoding operation is essentially the reverse (shifting to the left). I'd suspect you could reuse much of the same logic.

Your decoding program:

If you want, you may implement both functionalities into one program so long as you provide a mechanism for the user to access both operations (but note this is not required for successful completion of this project).

Code

The encipher code:

/*
 * encipher.c - program that encodes a message according to a key
 *
 *
 * Compile with: gcc -o encipher encipher.c
 *
 * Place key value in: key.txt
 * Place message to encipher in: plain.txt
 * Enciphered message placed in: cipher.txt
 *
 * Execute with: ./encipher    or    ./encipher KEYVAL
 *
 */
 
#include <stdio.h>
 
int main(int argc, char **argv)
{
    printf("Hello, World!\n");
 
    if(argc == 2)
    {
        printf("%s was called with the following argument: %d\n", argv[0], atoi(argv[1]));
    }
    else
    {
        printf("No argument was provided. Get value from file.\n");
    }
    return(0);
}

Don't forget your deciphering code as well.

Execution

An example run of the enciphering process:

lab46:~/src/cprog/project1$ ./encipher 7
Cipher key provided on command line: 7

Message is: Traveling the world is the best way to study geography.
 Cipher is: Ayhclspun aol dvysk pz aol ilza dhf av zabkf nlvnyhwof.

lab46:~/src/cprog/project1$ cat cipher.txt
Ayhclspun aol dvysk pz aol ilza dhf av zabkf nlvnyhwof.
lab46:~/src/cprog/project1$ 

Now, we switch gears and decipher a different (previously enciphered) message:

lab46:~/src/cprog/project1$ echo "12" > key.txt
lab46:~/src/cprog/project1$ echo "Ftq yagzfmuz mfq ftq pas, MZP TAI!" > cipher.txt
lab46:~/src/cprog/project1$ ./decipher
Cipher key found in key.txt: 12

 Cipher is: Ftq yagzfmuz mfq ftq pas, MZP TAI!
Message is: The mountain ate the dog, AND HOW!

lab46:~/src/cprog/project1$ cat plain.txt
The mountain ate the dog, AND HOW!
lab46:~/src/cprog/project1$ 

Reflection

Comments/thoughts generated through performing the project, observations made, analysis rendered, conclusions wrought. What did you learn from doing this project?

References

In performing this project, the following resources were referenced:

Generally, state where you got informative and useful information to help you accomplish this project when you originally worked on it (from Google, other wiki documents on the Lab46 wiki, etc.)