1 / 25

Programming

Programming. Array Application. kayak. Character Array: Ex. 1. Note: a palindrome is a word (or words) which read the same forward and backward kayak solos radar racecar deified evil olive Malayalam lonely Tylenol Re-divider Madam I'm Adam step on no pets won ton? not now.

caitir
Télécharger la présentation

Programming

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programming Array Application

  2. kayak Character Array: Ex. 1 • Note: a palindrome is a word (or words) which read the same forward and backward • kayak • solos • radar • racecar • deified • evil olive • Malayalam • lonely Tylenol • Re-divider • Madam I'm Adam • step on no pets • won ton? not now Run Example 1 to find out which words the computer considers a palindrome

  3. An Encoded Message • What does the following message represent? YMJ%HTRU657%HQFXX%NX%YTT%JFX^& Answer: THE COMP102 CLASS IS EASY! • Problem statement: Write a function that encodes a message (in English) using some encryption method, and another function that decodes the encoded message.

  4. Offset Cipher • We use the simplest method, the “offset cipher”. • Define offset value, which will be used in both the encoding and decoding processes. • The encoding function shifts each character in the message higher by the offset amount.Example: if offset is 1, then a becomes b. • The decoding function shifts each character in the encoded message lower by the same offset amount.Example: if offset is 1, then b becomes a.

  5. Ex. 2: Main Function int main() { char wait; //Temporary input control character // Print out original plain text dump("input.txt"); cout << endl << endl; cout << "Please press a key to encode this file:"; cin >> wait; // Call encode function encode1("input.txt", "cipherfile.txt");

  6. Ex. 2: Main Function // Print out encoded (cipher) text dump("cipherfile.txt"); cout << endl << endl; cout << "Please press a key to decode this file:"; cin >> wait; // Call decode function decode1("cipherfile.txt", "output.txt"); // Print out decoded text dump("output.txt"); return 0; }

  7. Ex. 2: encode1 Function void encode1(const char plaintext[], const char ciphertext[]){ // plaintext is filename where the original // message (in English) is stored // ciphertext is filename in which to store// the encoded message const int offset = 5; // secret offset value char tempchar; // declare input and output file streams ifstream ins; ofstream outs; // open input and output data files ins.open(plaintext); outs.open(ciphertext);

  8. Ex. 2: encode1 Function // read original text message character-by-char ins.get(tempchar); while (!ins.eof()) { // encode the character tempchar += offset; // write encoded character to // the output file outs.put(tempchar); // read next character ins.get(tempchar); } // close files ins.close(); outs.close(); }

  9. Ex. 2: decode1 Function void decode1(const char ciphertext[], const char plaintext[]){ // ciphertext is filename where the // encoded message is stored // plaintext is filename in which to store // the decoded message const int offset = 5; // same offset value char tempchar; // declare input and output file streams ifstream ins; ofstream outs; // open input and output files ins.open(ciphertext); outs.open(plaintext);

  10. Ex. 2: decode1 Function // read encoded message character-by-characterins.get(tempchar);while (!ins.eof()) { // decode the character tempchar -= offset; // write decoded character //to the output file outs.put(tempchar); // read next encoded character ins.get(tempchar); } // close files ins.close(); outs.close(); }

  11. Ex. 2: Dump File to Screen void dump(const char filename[]){ // this function outputs the contents of a file // whose name is given in the parameter filename char tempchar; ifstream ins; // declare input file stream ins.open(filename); // open input file// output the file content character by character ins.get(tempchar); while (!ins.eof()) { cout << tempchar; ins.get(tempchar); } // close input file ins.close(); }

  12. Cipher Improvement • The simple offset cipher is very easy to break (for example, by using frequency analysis to determine the constant offset value). • Better security is provided by a cipher where a key sequence is used for offset values. • The first character in the plain text is offset by the first key value in the key sequence. The second is offset by the second key value, and so on. • The longer the key sequence, the harder it is to break the encryption. • Both the sender and receiver must share the same secret key sequence.

  13. A New Message • What does the following message represent? Z¡¬ L¥]X6¼}un¢┤^╨ÑIXƒ[osåæ Answer: THE COMP102 CLASS IS FUN!

  14. Ex. 3: Main Function int main() { char wait; //Temporary input control character int key[KEY_SIZE], index; // declare key array // declare the input and output file names char input_file_name[16], output_file_name[16]; // user supplies the input and output file names cout << "Enter input file name (max 15 chars):\n"; cin >> input_file_name; cout << "Enter output file name (max 15 char):\n"; cin >> output_file_name;

  15. Ex. 3: Main Function // Print out original plain text dump(input_file_name); cout << endl << endl; //create the seed for the random number generator srand(time(NULL)); //Create decode key array; for (index = 0; index < KEY_SIZE; index++) { //For plain ASCII text, //the offset should be less than 128 key[index] = rand()% MAX_OFFSET; //Print out the random number //cout << key[index] << " "; }

  16. Ex. 3: Main Function cout << "Please press a key to encode this file: "; cin >> wait; // Call encode function encode(input_file_name, "cipherfile.txt", key); // Print out encoded (cipher) text dump("cipherfile.txt"); cout << endl << endl;

  17. Ex. 3: Main Function cout << "Please press a key to decode this file: "; cin >> wait; // Call decode function decode("cipherfile.txt", output_file_name, key); // Print out decoded text dump(output_file_name); cout << endl << endl; return 0; }

  18. Ex. 3: encode Function void encode(const char plaintext[], const char ciphertext[], const int keylist[]){ // plaintext is filename where the input // message (in English) is stored // ciphertext is filename in which to // store the encoded message // keylist is the array with the coding key char tempchar; int index = 0;

  19. Ex. 3: encode Function // declare input and output file streams ifstream ins; ofstream outs; // open input and output data files ins.open(plaintext); outs.open(ciphertext);

  20. Ex. 3: encode Function // read original text character-by-character ins.get(tempchar); while (!ins.eof()) { // encode the character tempchar += keylist[index]; //Use the key sequence in a cycle index = (index+1) % KEY_SIZE; // write encoded character to the output file outs.put(tempchar); // read next character ins.get(tempchar); } // close files ins.close(); outs.close(); }

  21. Ex. 3: decode Function void decode(const char ciphertext[], const char plaintext[], const int keylist[]){ // ciphertext is filename where the encoded // message is stored // plaintext is filename in which to store // the decoded message // keylist is the array with the coding key char tempchar; int index = 0;

  22. Ex. 3: decode Function // declare input and output file streams ifstream ins; ofstream outs; // open input and output data files ins.open(ciphertext); outs.open(plaintext);

  23. Ex. 3: decode Function // read encoded message character-by-characterins.get(tempchar);while (!ins.eof()) {tempchar -= keylist[index]; // decode char //Use the key sequence in a cycle index = (index+1) % KEY_SIZE; // write decoded character to output file outs.put(tempchar); // read next encoded character ins.get(tempchar); } // close files ins.close(); outs.close(); }

  24. Ex. 3: Dump File to Screen void dump(const char filename[]){ // this function outputs the contents of a file // whose name is given in the parameter filename char tempchar; ifstream ins; // declare input file stream ins.open(filename); // open input file// output the file content character by character ins.get(tempchar); while (!ins.eof()) { cout << tempchar; ins.get(tempchar); } // close input file ins.close(); }

  25. Cipher Improvement • Much stronger encryption systems exist (such as PGP, DES, etc.) today. ( For more information on data encryption in general, refer to the book by David Kahn, “The Code-Breakers” The Mac Millan New York 1976.)

More Related