//___ Program for Encryption and Decryption in C ___ /* Program will read the message and an encryption key (which should be of only 3 digits) and based on that key data will be encrypted and for decryption the program will again read a number and if it is same as that of the number being inputted the first time original message can be obtained */ /* Encrypted message in not printed but you can edit the code to watch the encrypted message */ //____ Including Header Files ___ #include #include #include #include //__ Included for fflush(stdin) ___ char original_message[100]; int temp_variable = 0; int encryption_message_key_scan(); int decryption_message_key_scan(); void message_encryption(char *original_message, int temp_key); //___ Function to encrypt the message ___ void message_decryption(char *original_message, int temp_key); //___ Function to decrypt the message ___ int main() //___ Main function from where the program execution starts ___ { int temp = 0, counter = 0; printf("\n\n\t\t__________ Encryption/Decryption in C _________\n\n"); printf("\n\n 1. Encryption will take place\n\n 2. Decryption will take place"); printf("\n\n\t Press Enter to Continue....."); printf("\n\n________________________________________________________________________________"); while(getch() != 13) { } fflush(stdin); printf("\n\n Encryption - "); temp = encryption_message_key_scan(); message_encryption(original_message, temp++); printf("\n\n________________________________________________________________________________"); printf("\n\n Decryption - "); temp = decryption_message_key_scan(); message_decryption(original_message, temp); printf("\n\n Your Message - "); puts(original_message); getch(); } /* Function to scan the message and the encryption key based on which message will be encrypted */ int encryption_message_key_scan() { int encryption_key = 0; printf("\n\n Enter the Message - "); gets(original_message); fflush(stdin); printf("\n\n Enter the Number - "); //___ Prompting the user to add the key ___ scanf("%d",&encryption_key); //__ Reading the three digit encryption key __ return encryption_key; } /* Function to scan the decryption key and the function return type is of integer i.e. it returns the decryption key where the function is being called */ int decryption_message_key_scan() { int decryption_key = 0; fflush(stdin); printf("\n\n Enter the Number - "); //___ Prompting the user to add the key ___ scanf("%d",&decryption_key); //__ Reading the three digit encryption key __ return decryption_key; } void message_encryption(char *original_message, int temp_key) { int encryption_key = 0, remainder = 0, first_digit = 0, last_digit = 0, string_length = 0, counter = 0; char temp_character; /* Counter in the while loop represents the place value (0 place represents the ones/2 represents 100 place value) */ while(temp_key != 0) { remainder = temp_key % 10; temp_key = temp_key / 10; if(counter == 0 ) { last_digit = remainder; } else if ( counter == 2) { first_digit = remainder; } counter++; } if (counter == 3) //___ if the number is of 3 digits then ___ { string_length = 0; //___ String_length is used to count the number of characters in message ___ while(original_message[string_length] != '\0') //___ Counting the number of characters in the message__ { string_length++; } if (string_length%2 != 0) //__ According the algorithm if message length is odd, make it even ___ { original_message[string_length] = 32; original_message[string_length + 1] = '\0'; string_length++; } //___ Replacing the characters at the initial positions _____ temp_character = original_message[first_digit - 1]; original_message[first_digit - 1] = original_message[last_digit - 1]; original_message[last_digit - 1] = temp_character; while((string_length >= first_digit * 2) && (string_length >= last_digit * 2)) /* The loop will continue till any of the condition is false i.e. if any of the digit is becomes greater than message length loop will stop */ { first_digit = first_digit * 2; last_digit = last_digit * 2; temp_character = original_message[first_digit - 1]; original_message[first_digit - 1] = original_message[last_digit - 1]; original_message[last_digit - 1] = temp_character; } counter = 0; while(counter!= string_length) //__ Replacing the spaces will'@' __ { if (original_message[counter] == ' ') { original_message[counter] = '@'; } counter = counter + 1; } } else { printf("\n\n\t\t __ 3 Digit Only __"); } } void message_decryption(char *original_message, int temp_key) { char temp_character; int decryption_key = 0, string_length = 0, remainder = 0, counter = 0, previous_first = 0, previous_last = 0,last_digit = 0, first_digit = 0, original_first = 0, original_last = 0; while(temp_key != 0) { remainder = temp_key % 10; temp_key = temp_key / 10; if (counter == 0 ) { last_digit = remainder; } else if ( counter == 2) { first_digit = remainder; } counter++; } if (counter == 3) { string_length = 0; while(original_message[string_length] != '\0') //___ Counting the number of characters in the message__ { string_length++; } original_first = first_digit; original_last = last_digit; counter = 0; while(original_message[counter] != '\0') //__ Replacing '@' with space __ { if (original_message[counter] == '@') { original_message[counter] = 32; } counter++; } while((first_digit <= string_length) && (last_digit <= string_length)) { previous_first = first_digit; previous_last = last_digit; first_digit = first_digit * 2; last_digit = last_digit * 2; } while((previous_first != original_first) && (previous_last != original_last)) { temp_character = original_message[previous_first - 1]; original_message[previous_first - 1] = original_message[previous_last - 1]; original_message[previous_last - 1] = temp_character; previous_first = previous_first/2; previous_last = previous_last/2; } temp_character = original_message[previous_first - 1]; original_message[original_first - 1] = original_message[original_last - 1]; original_message[original_last - 1] = temp_character; } else { printf("\n\n\t\t __ 3 Digit only __"); } }