![]() |
| | #1 |
| i dont know Join Date: May 2002
Posts: 1,200
| Simple message encryption I kept it as simple as possible so people new to C++ might could learn something from it. Then again as my programming skills arent exectly "good" I might learn something myself after a few of you see it .You simply give a file name a secret key and the message. Code: /******************************************************/
/* This program will encrypt and decrypt messages. The*/
/* user will simply have to remeber a secret key. */
/******************************************************/
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
// Function Prototypes ---------------------------------
int GetUserChoice ();
void Encryption ();
void Decryption ();
string XorString ( string source, int key );
// -----------------------------------------------------
// Main Function ---------------------------------------
int main ()
{
// Variable to hold our choice
int choice;
// Create an infinite loop -------------------------
while ( 1 ) {
// GetUserChoice will return what the user wants to do
// We can assign the returned value to our variable
choice = GetUserChoice ();
// Now we can check what the user wants
if ( choice == 1 ) Encryption ();
else if ( choice == 2 ) Decryption ();
// If the choice was 3 that means we can break from our loop
else if ( choice == 3 ) break;
}
// -------------------------------------------------
return 0;
}
// GetUserChoice Function ------------------------------
int GetUserChoice ()
{
// Variable for the choice
int choice;
// Here we will print our menu and prompt for a number
// This number will represent what the user wants to do
// Once we have the number this function will return it
cout << "Message Encryption" << endl;
cout << "----------------------" << endl;
cout << "1) Encrypt Message" << endl;
cout << "2) Decrypt Message" << endl;
cout << "3) Exit" << endl << endl;
cout << "Make a selection: ";
cin >> choice;
// Now we will check to make sure the choice was valid
if ( choice != 1 && choice != 2 && choice != 3 ) {
cout << endl;
cout << "Please enter 1, 2, or 3" << endl;
cout << "Press enter to exit...";
// Since the user entered an invalid selection we
// will just exit the program by returning our programs
// exit code.. 3
cin.get ();
return 3;
}
// If it makes it to this point that means the input was valid so we can return it
return choice;
}
// -----------------------------------------------------
// Here is where we will encrypt the string ------------
string XorString ( string source, int key )
{
// Here we loop through each character, using binary xor on it.
for ( unsigned int loop = 0; loop < source.size (); loop ++ ) {
source [loop] ^= key;
}
return source;
}
// Here we will get the file name, key, and message from the user ----
void Encryption ()
{
// Variables for the file name, key and message ----
char file_name [255];
string message;
string encrypted_message;
int key;
// -------------------------------------------------
cout << endl;
cout << "Enter file name: ";
cin >> file_name;
cout << "Enter secret key: ";
cin >> key;
cout << "Enter your secret message." << endl;
cout << "Message: ";
// We need this to ignore anything that might be left over
// and ruin our message
cin.ignore ( 255, '\n' );
getline ( cin, message );
// Now we have all of the info we can encrypt and write --
// the string to the file --------------------------------
encrypted_message = XorString ( message, key );
ofstream file ( file_name );
file << encrypted_message;
file.close ();
// -------------------------------------------------------
cout << "Done..." << endl << endl;
}
// -------------------------------------------------------------------
// Decryption will work the same way. Instead of asking the user for the message, ---
// we print it out. -----------------------------------------------------------------
void Decryption ()
{
// Variables for the file name, key and message ----
char file_name [255];
string message;
int key;
// -------------------------------------------------
cout << endl;
cout << "Enter file name: ";
cin >> file_name;
cout << "Enter secret key: ";
cin >> key;
// Now we will check to see if the file exists -----
ifstream file ( file_name );
if ( !file.is_open () ) {
cout << "Failed to load " << file_name << "!" << endl;
cout << "Press enter to exit...";
cin.get ();
exit ( EXIT_FAILURE );
}
// -----------------------------------------------
getline ( file, message );
file.close ();
cout << "Message: " << XorString ( message, key ) << endl;
cout << "Done..." << endl << endl;
}
. But if you see any really big nono's be sure to point them out! This was a quick little boredom project I did to kill a good 30 mins. ENJOY!EDIT: Sorry for the indention errors. Seems the boards code tags doesnt like MinGW Studios formatted code ![]() And I know its not extremely useful but hey you moght want to store a phone number or something
__________________ What is C++? Last edited by Vicious; 10-04-2004 at 12:34 AM. |
| Vicious is offline | |
| | #2 |
| Code Goddess Join Date: Sep 2001
Posts: 9,661
| >But if you see any really big nono's be sure to point them out! Check the return value of all stream input. You risk undefined behavior otherwise. >Seems the boards code tags doesnt like MinGW Studios formatted code Tabs are evil, replace them with the requisite number of spaces.
__________________ My best code is written with the delete key. |
| Prelude is offline | |
| | #4 |
| Registered User Join Date: Sep 2004
Posts: 32
| Hi Vicious, This is perfect timing. I just finished a chapter on binary operators. Thanks for posting this. I still haven't got to file input/output yet but I think I can follow what you've written. Much obliged. |
| Elhaz is offline | |
| | #5 |
| Registered User Join Date: May 2003
Posts: 2,787
| there's already something on XOR encryption on cprogramming.com ... I don't know if they're still accepting resources or not, but they should be... that would be cool to get the main cprog site back to a good place to learn stuff...
__________________ Join is in our Unofficial Cprog IRC channel Server: irc.phoenixradio.org Channel: #Tech Team Cprog Folding@Home: Team #43476 Download it Here Detailed Stats Here More Detailed Stats 52 Members so far, are YOU a member? Current team score: 1223226 (ranked 374 of 45152) The CBoard team is doing better than 99.16% of the other teams Top 5 Members: Xterria(518175), pianorain(118517), Bennet(64957), JaWiB(55610), alphaoide(44374) Last Updated on: Wed, 30 Aug, 2006 @ 2:30 PM EDT |
| major_small is offline | |
| | #6 |
| i dont know Join Date: May 2002
Posts: 1,200
| Thats what gets my goat.. im not any good at thinking up of amazing new ways to do things. I can only do things that have already been done and then I dont do them that well! Anywho.. I think that the stuff that is on cprog is amazing. If they would keep adding to it it would be the best place around.
__________________ What is C++? |
| Vicious is offline | |
| | #7 |
| the hat of redundancy hat Join Date: Aug 2001 Location: Hannover, Germany
Posts: 2,754
| We had a cprog challenge once, but I couldn't find the link... PHP Code:
__________________ hth -nv She was so Blonde, she spent 20 minutes looking at the orange juice can because it said "Concentrate." When in doubt, read the FAQ. Then ask a smart question. |
| nvoigt is offline | |
| | #8 |
| Registered User Join Date: Oct 2004
Posts: 13
| very cool program. i am new to c++ and i will be sure to look at this and learn from it. |
| cpp!n is offline | |
| | #9 |
| Registered User Join Date: Jul 2004
Posts: 98
| @ Vicious : May I ask you a little question? When I input "1.1" not "1" in your selection menu, ".1" be received by next cin, this is my problem: How to clear (or flush) no used input value (or number ,string..)? |
| toysoldier is offline | |
| | #10 |
| Registered User Join Date: Sep 2004
Posts: 32
| Hi toysoldier, I found this link quite useful. It really helped clear up a lot of my input woes. http://www.augustcouncil.com/~tgibso...al/iotips.html Hope it helps you. |
| Elhaz is offline | |
| | #11 |
| Registered User Join Date: Jul 2004
Posts: 98
| @ Elhaz : Thanks for your weblink, now I understand how to use cin.clear() and cin.ignore(), add this web to my bookmark. |
| toysoldier is offline | |
![]() |
| Thread Tools | |
| Display Modes | |
|
Similar Threads | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Strange string behavior | jcafaro10 | C Programming | 2 | 04-07-2009 07:38 PM |
| Encryption program | zeiffelz | C Programming | 1 | 06-15-2005 03:39 AM |
| Architecture Question | Orborde | C++ Programming | 1 | 06-01-2005 08:05 AM |
| Dialog Box Problems | Morgul | Windows Programming | 21 | 05-31-2005 05:48 PM |
| RSA Encryption | minesweeper | Tech Board | 6 | 08-30-2003 01:48 PM |