Thread: Encryption Contest

  1. #16
    Deleting... VOX's Avatar
    Join Date
    Oct 2004
    Location
    VA
    Posts
    94
    >>Needs to be able to encrypt or decrypt any type of file

    That is kind of broad don't you think? Is it ok if we are able to just encrypt/decrypt just one/a few files?
    Boy you stink, go take a shower before you continue to code. Better do your laundry and spray your chair too.

    The one and only resource for finding information.

    Next version of windows released!!!!

  2. #17
    Banned
    Join Date
    Jun 2005
    Posts
    594
    If you are using some kind of binary encryption you should beable
    to encrypt and decrypt any type of file, i have already written my
    algy for this competition i just have a few idea to make it user
    friendly and giving it a few more options.

    So far i have tested it with mp3, wma, mpeg, avi, txt, pdf, rar, zip
    file type and it has worked prefectly everytime.

  3. #18
    Banned
    Join Date
    Jun 2005
    Posts
    594
    Quote Originally Posted by JoshR
    You can post as many submissions as you want. If you want to put encrypt and decrypt in different exe's then go ahead, but why not keep it in the same app?

    Keeping them in the same app would be my first choice,
    but being a console app it could be difficult for some
    user to use it, so if there seperate it may actually
    be an advantage. Plus some user may not need both,
    therefore if they can just get one, it saves them some HD space.

    Also being two seperate apps they can encrypt and decrypt
    different file at the same time.

  4. #19
    *this
    Join Date
    Mar 2005
    Posts
    498
    Quote Originally Posted by VOX
    >>Needs to be able to encrypt or decrypt any type of file

    That is kind of broad don't you think? Is it ok if we are able to just encrypt/decrypt just one/a few files?
    Sure, give it your best shot. Like I posted before, I't can be either binary or formated text (ascii, plain english, whatever you want to call it).

  5. #20
    *this
    Join Date
    Mar 2005
    Posts
    498
    Quote Originally Posted by ILoveVectors
    Keeping them in the same app would be my first choice,
    but being a console app it could be difficult for some
    user to use it, so if there seperate it may actually
    be an advantage. Plus some user may not need both,
    therefore if they can just get one, it saves them some HD space.

    Also being two seperate apps they can encrypt and decrypt
    different file at the same time.
    Sorry I don't really see an advantage to it. When you download an encryption program don't you want it to encrypt and decrypt? But do what you want, It will be graded as one app.

  6. #21
    Super Moderater.
    Join Date
    Jan 2005
    Posts
    374
    RSA *BS*

    ‘A prime number is one that has no exact divisors other than 1 and itself. For example, 2,3,5,7,11 are primes whereas 4,6,8,9,10 and not.’
    It is this property which makes them unique and incredibly useful.

    Prime Factors
    When you multiply two primes together you obtain a ‘composite’ number. For example:- 5 x 7 = 35. Doing the reverse, for example finding two primes which multiply to make 35 is called ‘factoring’.
    Obtaining a composite number is easy:-Simply multiply two primes together, whereas factoring a composite number is not so easy. In the example I have given, the solution is found very quickly. It wouldn’t take you long to work out the prime factors of 35. However, what happens if you need to factor a very large composite number, something containing 100+ digits? In short it would take a considerably long time.

    Secret codes (in a nutshell)
    Ok so what’s prime numbers got to do with codes? Read on and you’ll find out.
    So the story goes. In the autumn of 1982, at a scientific meeting in Winnipeg Canada, two mathematicians and a computer engineer went out for a beer one evening. Essentially, they soon began discussing the problems that arise when factoring large composite numbers and how this can be exploited in the field of data security and encryption.

    So how do you design an encryption system and what characteristics should it have? Basically, it should be able to encrypt and decrypt data using a ‘key’.
    The ‘key’ works by encoding the message in a way which depends upon the chosen key, so that only by knowing that key will it be possible to decode the ciphered text.

    Code:
    			+-------+			+------+
    			| key   |			| key  |
    			+-------+			+------+
    			    |				   |
    			    |				   |
    			    V     			   V
       +----------+     +-----------+     +----------+     +---------+     +---------+
       | message  |---> | encipher  |---> |  coded   |---> | decipher|---> | message |
       |          |     | program   |     | message  |     | program |     |         |
       +----------+     +-----------+     +----------+     +---------+     +---------+
     
    		S E N D E R				    R E C E I V E R
    In this particular system the program uses the same key to encrypt and decrypt the message. Such systems have an obvious drawback: Before it can be used, the sender and receiver have to agree on the key they will use, and since they will not want to transmit that key over any communication channel, they have to meet and choose the key, or at the very least employ a trusted courier to convey the key from one to the other. Such a system is no good for communication between individuals who have not already met. In particular, it is not suitable for use in, say, international banking, where it is necessary to send secure messages across the world to someone the sender has never met.

    This is where the RSA encoding system differs. It uses not one, but two keys, one for enciphering and the other for deciphering. Think of it like having a lock which requires one key to lock it and another to unlock it.

    The RSA system is called a ‘Trap door cipher’ for what should now be obvious reasons. For a comprehensive read on Trap door ciphers and RSA see the link below.

    http://www.geometer.org/mathcircles/RSA.pdf

    My Problem
    Clearly, in order to implement the RSA algorithm you need to develop a program which can handle the multiplication of large numbers. So I was thinking using strings… or even Fast Fourier Transforms and if worse comes to the worst I could download software from the GMP source.
    Similarly, you would need to find the modulus of large numbers- which should naturally follow the idea of multiplying large numbers.
    Once this is done it seems fairly straightforward to implement the RSA algorithm. In fact, I even tried my hand at the test example given in the above link. The solution for this is shown below if anyone wishes to confirm their results.
    Also you will need this link to handle the multiplication of large numbers:

    http://world.std.com/~reinhold/BigNumCalc.html

    However, despite all this, I can’t help feel I’m missing something important. Is RSA implementation much more difficult than this? I don’t want to undertake this project only to find out half way through I’ve bitten of more than I can chew so to speak.


  7. #22
    Banned
    Join Date
    Jun 2005
    Posts
    594
    dont know about all that, but i was considering using
    3 keys for my program, and random junk in the
    output file.

  8. #23
    Super Moderater.
    Join Date
    Jan 2005
    Posts
    374
    I've just completed my program which handles the multiplication of large integers. The code is pretty ugly as it's just a draft.

    But does anyone have any ideas how to handle the modulus of very large numbers?

    Code:
    /*
      Name: Multiply Program
      Copyright: n/a
      Author: Treenef
      Date: 12/07/05 19:03
      Description: Handles the multiplication
      of large integers using strings
    */
    #include <iostream>
    #include <fstream>
    #include <string>
    
    void one(void);
    void second(int);
    void third(int);
    void fourth(int);
    void fifth(void);
    
    using namespace std;
    
    int main()
    {
        char array_one[1000];
        char array_two[1000];
        int size_one,size_two;
        
        
        
        
        cout<<"Enter a number:";
        cin>>array_one;
        cout<<"Enter a second number:";
        cin>>array_two;
        //cout<<""<<endl;
        
        size_one=strlen(array_one);
        size_two=strlen(array_two);
        
        fstream file_pointer;
        file_pointer.open("mult.txt",ios::out);
        do
        {
        
        int thing=size_two-1;
        int carry=0;
        for(int i=0; i<size_two; i++)//array two
        {
            
        file_pointer<<""<<endl;
        for (int in=0; in<thing; in++)
        {
            file_pointer<<"0";
        }    
            
            for(int j=size_one-1; j>=0; j--)//array one
            {
                char p[10];
                char b[10];
                p[0]=array_one[j];
                b[0]=array_two[i];
       
                int k=atoi(p);
                int g=atoi(b);
                
                int y=k*g;
               
                if(y>=10)
                {
                   
                    int answer=carry+y;
                    int units=answer%10;
                    int tens=answer/10;
                    file_pointer<<units;
                    carry=tens;
                    
                    
                    if (j==0)
                    {
                        if(tens!=0)
                        {
                        file_pointer<<tens;
                        }    
                    }    
                }
                
                if (y<10)
                {
                    
                    int answer=carry+y;
                    int units=answer%10;
                    int tens=answer/10;
                    file_pointer<<units;
                    carry=tens;
                   
                    
                    if (j==0)
                    {
                        if(tens!=0)
                        {
                        file_pointer<<tens;
                        }    
                    }    
                }    
               
                   
                
            }
             
            carry=0;
            thing--;
            
            
        }
        
    }while(file_pointer.peek()!=EOF);
    file_pointer.close();    
        
        one();
        cout<<""<<endl;
        cout<<"done";
        int s;
        cin>>s;
    } 
    
    void one()
    {
        
        
        fstream file_pointer;
        file_pointer.open("mult.txt",ios::in);
        
        char array[1000];
        int count=0;
        int size;
        do
        {
            file_pointer>>array;
            if (count==0)
            {
                 size=strlen(array);
            }
            count++;
                
            
            
        }while(file_pointer.peek()!=EOF);
                
        file_pointer.close();
        cout<<""<<endl;
        
        second(size);
      
                 
    }  
    
    void second(int size)
    {
        fstream write;
        fstream file_pointer;
        file_pointer.open("mult.txt",ios::in);
        write.open("mult2.txt",ios::out);
        
        char array[1000];
       
        int size_of;
        do
        {
            write<<""<<endl;
            file_pointer>>array;
            size_of=strlen(array);
            int source=size-size_of;
            write<<array;
            
            for(int i=0; i<source; i++)
            {
                write<<"0";
            }
            
           
        }while(file_pointer.peek()!=EOF);
        file_pointer.close();
        write.close();
        
        third(size);
    }            
    
    void third(int size)
    {
        fstream write;
        write.open("mult3.txt",ios::out);
        
        for (int i=0; i<size; i++)
        {
        
        fstream file_pointer;
        file_pointer.open("mult2.txt",ios::in);
        
        char array[1000];
        
        //int size;
        write<<""<<endl;
        do
        {
            file_pointer>>array;
            write<<array[i];
        
                
        }while(file_pointer.peek()!=EOF);
        
        }    
        write.close();
      
        
        fourth(size);
    }    
    
    void fourth(int size)
    {
        fstream f_pointer;
        f_pointer.open("mult3.txt",ios::in);
        
        char arch[1000];
        int count=0;
        
        do
        {
            f_pointer>>arch;
            count++;
        }while(f_pointer.peek()!=EOF);
        f_pointer.close();
    
        
        
        fstream file_pointer;
        file_pointer.open("mult3.txt",ios::in);
        fstream write;
        write.open("mult.txt",ios::out);
        
        
        char array[1000];
        int carry=0;
        int counter=0;
        do
        {
            file_pointer>>array;
            int size=strlen(array);
            
            int total=0;
            int i;
            for(i=0; i<size; i++)
            {
                char p[10];
                p[0]=array[i];
                
                int k=atoi(p);
                total=total+k;
            }
            
                   if(total>=10)
                   { 
                    
                    int answer=carry+total;
                    int units=answer%10;
                    int tens=(answer-units)/10;
             
                    write<<units;
                    
                    carry=tens;
                     if (counter==count-1)
                     {
                         write<<tens;
                     }    
    
                   }    
                   
                   if(total<10)
                   {
                      
                    
                    int answer=carry+total;
                    int units=answer%10;
                    int tens=(answer-units)/10;
                    
                    write<<units;
                   
                    carry=tens;
      
                   }   
                   counter++; 
               
            //carry=0;
            //need one last condition for case 432x25 show tens!!
        
      
        
        }while(file_pointer.peek()!=EOF);
        file_pointer.close();
        write.close();
        
        fifth();
    }            
        
    void fifth(void)
    {
        fstream file_pointer;
        file_pointer.open("mult.txt",ios::in);
        
        char array[1000];
        
        do
        {
            file_pointer>>array;
            int size=strlen(array);
            
            for(int i=size-1; i>=0; i--)
            {
                cout<<array[i];
            }
        }while(file_pointer.peek()!=EOF);
        file_pointer.close();
    }

    Sample input/output: (Note the first number has to be bigger than the second)

    Code:
    Enter a number:465465432165749846
    Enter a second number:6549846546
    
    3048727153153233928323131916
    done

  9. #24
    Banned
    Join Date
    Jun 2005
    Posts
    594
    Come on peopel join this contest it will be fun.

    Hey JoshR maybe you can update us
    with the name fo the people who have submitted so
    far or something to keep this alive.

  10. #25
    *this
    Join Date
    Mar 2005
    Posts
    498
    Lol k...so far...

    Contestants:
    1) ILoveVectors

    Cmon guys its a very open contest, just give it your best shot
    Encryption is fun and you know it!

  11. #26
    Banned
    Join Date
    Jun 2005
    Posts
    594
    Woot im winning lol,

    anyways just out of curiosity,
    what did you think about the simple
    approach to my encryption?

    and did you have any problems or question,
    and have you tried to crack a encrypted file yet?

  12. #27
    Registered User
    Join Date
    Jul 2005
    Posts
    9
    I'll submit one of my old algorithms. I made it over the last day or two for this contest thread (the origonal one is in javascript). It adds the ascii value of the character it's on to the one before it, and trims it to be between 0 and 255. The key is added to the first letter to make it secure, and it prints it out back to the file you ecrypted. It's uncrackable , but is easily brute forced, as the key is taken as a number, and gets trimmed anyway. There are only 256 truly distinct keys, and it doesn't leave a copy of the original text (but that's probably what you wanted, if you were encrypting).

    Code:
    /*
    A rippleCrypt algorithm by Alex Borland
    an original algorithm, encrypting the string "with itsself"
    increases a character's ascii value by the ascii value of the character in front of it.
    the first character's ascii value is increased by the key number.
    */
    
    #include <stdio.h>
    #include <iostream.h>
    #include <fstream.h>
    #include <string.h>
    
    int trimInt(input){//adds and subtracts inputted number until it is
    while (input < 0){//between 0 and 255
    input += 256;
    }
    while (input > 255){
    input -= 256;
    }
    return input;
    }
    
    void rippleCrypt(char input[], int key, char outputFileName[]){
    ofstream outputFile(outputFileName);
    int loop = 1;
    int len = strlen(input);
    char output[strlen(input)+1];
    while (loop<len){
    output[loop] = (char)trimInt((int)input[loop]+(int)input[loop-1]);
    loop ++;//             ^^adds the ascii values of the character it's on 
    }//                              and the one bofore it
    output[0] = (char)trimInt((int)input[0]+key);//protects the 
    output[loop] = '\0';//                                        first character
    outputFile << output;//writes to the file
    cout << output << endl;
    }
    
    //this is the same as above, but in reverse
    void rippleDecrypt(char input[], int key, char outputFileName[]){
    char output[strlen(input)+1];
    ofstream outputFile(outputFileName);
    int loop = 1;
    int len = strlen(input);
    output[0] = (char)trimInt((int)input[0]-key);
    while (loop<len){
    output[loop] = (char)trimInt((int)input[loop]-(int)output[loop-1]);
    loop ++;
    }
    output[loop] = '\0';
    outputFile << output;
    cout << output << endl;
    }
    
    void main(){//this collects the required info from the user to make
    char fileContents[5000];// it work.  fairly straightforward
    char inputFileName[100];
    cout << "Please enter the name of the file to encrypt: " << endl;
    cin >> inputFileName;
    int key;
    cout << "Please enter the key to encrypt the file with: " << endl;
    cin >> key;
    char mode[32];
    cout << "Are you encrypting or decrypting? " << endl;
    cin >> mode;
    ifstream inputFile(inputFileName);
    inputFile.getline(fileContents, 4999, EOF);
    inputFile.close();
    if (mode[0] == 'd'){
    rippleDecrypt(fileContents, key, inputFileName);
    } else {
    rippleCrypt(fileContents, key, inputFileName);
    }
    }
    sorry if it's poorly commented. Please note that I edited it from my first post to support the extended ascii set.
    Last edited by Jherry; 07-19-2005 at 10:30 AM. Reason: updated code

  13. #28
    ---
    Join Date
    May 2004
    Posts
    1,379
    I will beat you all with my |337 5k1||5
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    #define FOUT "out.txt"
    #define FIN  "in.txt"
    
    int open_files(FILE**, FILE**);
    int close_files(FILE**, FILE**);
    
    const char *key = "&'÷àù§¡?-ö¦-v?91±¡¦X=ôù2?+-+²?ÄNH¢?);I¿c]¦? ¯mh¦çܬ-_˜-Dü?@b80Nö+?-¦-?¥K?£F+n¦TgA";
    
    int main(int argc, char **argv){
      int ch;
      int i = 0;
      FILE *in, *out;
      
      open_files(&in,&out);
      
      while((ch = fgetc(in)) != EOF){
        ch ^= key[i];
        fputc(ch,out);
        
        if(i >= sizeof(key)) i = 0;
        else i++;   
      }
      close_files(&in,&out);
      return 0;
    }
    
    int open_files(FILE **in, FILE **out){
      int retval = 0;
      if((*in = fopen(FIN,"r")) == NULL){
        printf("Error opening %s\n",*FIN);
        retval = -1;
      }  
      if((*out = fopen(FOUT,"w")) == NULL){
        printf("Error opening %s\n",FOUT);
        retval = -1;
      } 
      
      return retval;  
    }  
    
    int close_files(FILE **in, FILE **out){
      int retval = 0;
      if( fclose(*in) == EOF){
        printf("Error closing %s\n",FIN);
        retval = -1;
      }    
      if( fclose(*out) == EOF){
        printf("Error closing %s\n",FOUT);
        retval = -1;
      }    
      return retval;
    }

  14. #29
    Banned
    Join Date
    Jun 2005
    Posts
    594
    i could be wrong but that doesnt look
    like original, looks like XOR,
    not to mention, the key is right there.

    good try though, we need more people, keep
    them comming.

  15. #30
    Banned
    Join Date
    Jun 2005
    Posts
    594
    Btw since everyone seem to be posting there contest code
    instead of pm'ing it i guess i will go ahead and post
    the code i turned in.


    Code:
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {	
    	string mykey;
    	string infile;
    	string outfile;
    
    	int choice;
    	cout << "1. Encrypt" << endl;
    	cout << "2. Decrypt" << endl;
    	cout << "Your Choice : ";
    	cin >> choice;
    	cin.ignore();
    	if(!cin)//Checks for bad input
    	{
    		cout << "I tried to figure out what you wanted" << endl;
    		cout << "but your want eludes me." << endl;
    		cout << "Program has been terminated!" << endl;
    		return 1;
    	}
    	if(choice == 1)//Load encrypt Section
    	{
    		cout << "Enter your key (Must be at least 8 characters): ";
    		getline(cin, mykey, '\n');
    		cout << "Location of file to encrypt, Ex \"c:/myfile.txt\" : ";
    		getline(cin, infile, '\n');
    		cout << "Location to save encrypted file, Ex \"c:/myoutfile.txt\" : ";
    		getline(cin, outfile, '\n');
    		int keysize = mykey.size();
    
    		if(keysize <= 7)
    		{
    			mykey.clear();
    			cout << endl << endl;
    			cout << "Your key was to short, here is a chance to fix that." << endl;
    			cout << "Enter a Key : ";
    			getline(cin, mykey, '\n');
    			keysize = mykey.size();
    			if(keysize <= 7)
    			{
    				cout << endl << endl;
    				cout << "You have failed to comply, encryption terminated!" << endl;
    				cin.get();
    				return 4;
    			}
    		}
    		if(infile.empty())
    		{
    			cout << endl << endl;
    			cout << "How can i encrypt this file \"" << infile << "\" if it does not exsist?" << endl;
    			cin.get();
    			return 5;
    		}
    		if(outfile.empty())
    		{
    			cout << endl << endl;
    			cout << "How can i save to this file \"" << outfile << "\" if you dont specify one?" << endl;				cin.get();
    			return 5;
    		}
    		if(infile == outfile)
    		{
    			outfile+=".enc";
    		}
    		
    		ifstream in(infile.c_str(), ios::binary);
    	
    		if(in.fail())//Makes sure both file have been opened before continuing
    		{
    			cout << endl << endl;
    			cout << "I couldnt locate your file, I am sorry." << endl;
    			cout << "The error is related to this entry : ";
    			cout << infile << endl;
    			cin.get();
    			return 2;
    		}
    
    		ofstream out(outfile.c_str(), ios::binary);
    		if(out.fail())
    		{
    			cout << endl << endl;
    			cout << "I was unable to create a output file, I am sorry." << endl;
    			cout << "The error is related to this entry : ";
    			cout << outfile << endl;
    			cin.get();
    			return 2;
    		}
    
    		int i = 0;
    		int q = 0;
    		char letter;
    		char changed1;
    		char junkletter;
    		while( in.read( (char*)&letter, sizeof(letter) ))//read one character till end of the file
    		{
    			q++;
    			if((i+3) > keysize)//make sure we wont be overstepping the bound of our keysize
    			{
    				i = 0;
    			}
    			for(int j = 0; j != 3; j++,i++)//applys 3 character of the key to character read in
    			{
    				changed1 = (letter-mykey[i]);//subtract mykey[i] thru mykey[i+3] from original letter
    			}
    			out.write( (char*)&changed1, sizeof(changed1) );//output the character to the new file
    			if(q == mykey[i])//if q is equal to a character in the key, it time to put a junk character
    			{
    				q = 0;
    				junkletter = (changed1+mykey[i+2]);//create the junk character
    				out.write( (char*)&changed1, sizeof(changed1) );//out put the junk character
    			}
    		}
    		in.close();
    		out.close();
    	}
    	else //Load Decrypt Section
    	{
    		cout << "Enter your key : ";
    		getline(cin, mykey, '\n');
    		cout << "Location of the encrypted file, Ex \"c:/myfile.txt\" : ";
    		getline(cin, infile, '\n');
    		cout << "Location to save decrypted file, Ex \"c:/myoutfile.txt\" : ";
    		getline(cin, outfile, '\n');
    		int keysize2 = mykey.size();
    
    		if(keysize2 <= 7)
    		{
    			mykey.clear();
    			cout << endl << endl;
    			cout << "Your key was to short, here is a chance to fix that." << endl;
    			cout << "Enter a Key : ";
    			getline(cin, mykey, '\n');
    			keysize2 = mykey.size();
    			if(keysize2 <= 7)
    			{
    				cout << endl << endl;
    				cout << "You have failed to comply, encryption terminated!" << endl;
    				cin.get();
    				return 4;
    			}
    		}
    		if(infile.empty())
    		{
    			cout << endl << endl;
    			cout << "How can i decrypt this file \"" << infile << "\" if it does not exsist?" << endl;
    			cin.get();
    			return 5;
    		}
    		if(outfile.empty())
    		{
    			cout << endl << endl;
    			cout << "How can i save to this file \"" << outfile << "\" if you dont specify one?" << endl;
    			cin.get();
    			return 5;
    		}
    		ifstream in2(infile.c_str(), ios::binary);
    	
    		if(in2.fail())//Makes sure both file have been opened before continuing
    		{
    			cout << endl << endl;
    			cout << "I couldnt locate your file, I am sorry." << endl;
    			cout << "The error is related to this entry : ";
    			cout << infile << endl;
    			cin.get();
    			return 2;
    		}
    
    		ofstream out2(outfile.c_str(), ios::binary);
    		if(out2.fail())
    		{
    			cout << endl << endl;
    			cout << "I was unable to create a output file, I am sorry." << endl;
    			cout << "The error is related to this entry : ";
    			cout << outfile << endl;
    			cin.get();
    			return 2;
    		}
    
    		int i2 = 0;
    		int q2 = 0;
    		char letter2;
    		char shanged1;
    		while( in2.read( (char*)&letter2, sizeof(letter2) ) )//read one character till end of the file
    		{
    			q2++;
    			if((i2+3) > keysize2)//make sure we wont be overstepping the bound of our keysize
    			{
    				i2 = 0;
    			}
    			for(int j = 0; j != 3; j++,i2++)//applys 3 character of the key to character read in
    			{
    				shanged1 = (letter2+mykey[i2]);//adds mykey[i] thru mykey[i+3] to get the original letter
    			}
    			out2.write((char*)&shanged1, sizeof(shanged1));//output the character to the new file
    			if(q2 == mykey[i2])
    			{
    				q2 = 0;
    				in2.read( (char*)&letter2, sizeof(letter2) );//discard the junk character
    			}
    		}
    		in2.close();
    		out2.close();
    	}
    	cout << "HAHA I have completed your tasks, may I have another!" << endl;
    	cin.get();
    	return 0;
    }

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Expression Evaluator Contest
    By Stack Overflow in forum Contests Board
    Replies: 20
    Last Post: 03-29-2005, 10:34 AM
  2. Results for the Encryption Contest -- June 23, 2002
    By ygfperson in forum A Brief History of Cprogramming.com
    Replies: 18
    Last Post: 07-07-2002, 08:04 AM
  3. Encryption Cracking Contest
    By vasanth in forum C++ Programming
    Replies: 51
    Last Post: 04-16-2002, 09:55 PM