Question

In: Computer Science

C++ Your country is at war and your enemies are using a secret code to communicate....

C++

Your country is at war and your enemies are using a secret code to communicate. You have managed to intercept a message that reads as follows: ,vtaNm a_"dabp!! The message is 16 characters long. The message is encrypted using the enemy’s secret code. You have just learned that the encryption algorithm is to take the original message, treat each group of 4 bytes like an integer, add a secret key to the integer, then copy the resulting number to the encrypted message treating it like four characters. For example, if the original string is “HI THERE” and the secret key is the number 2, then the algorithm would:

 Take the first four characters, which are the first four bytes, which are “HI T”.

 If these four bytes are typecast to a 4 byte int (the size of an int on most machines) then it has the value 1411402056.

 Add the secret key of 2 to the value resulting in the value 1411402058

 Typecast the 1411402058 back as a 4 character string, resulting in “JI T” (basically it just increases the leftmost character by 2 in the ASCII code)

The process is repeated for the next group of 4 characters, “HERE”:

 These four bytes are typecast to a 4 byte int which is the value 1163019592

 Add the secret key of 2 to the value resulting in the value 1163019594

 Typecast 1163019594 back as a 4 character string, resulting in “JERE” The entire encrypted string would be “JI TJERE”

In the case of ,vtaNm a_"dabp!! you have figured out that the secret key is a number between 1 and 500.

Write a function that decrypts an encrypted message using a key that input as a parameter. From main, call the function with numbers between 1 and 500 for the key, printing out the resulting decrypted text each time. When you hit the correct key you will get a message that makes sense and have cracked the code! You should implement your function/program with pointers that uses typecasting to map back and forth between (char *) and (int *) as appropriate. What is the secret key and the decrypted message?

Solutions

Expert Solution

#include<iostream>

#include<string.h>

using namespace std;
int main()

{
string encrpt_msg = ",vtaNm a_\"dabp!!";
char curr_block[4];
//looping for all secret keys 1 to 500

for(int i = 1; i <= 500; i++)

{
//decoding the msg for secret key i

char decrpt_msg[16];
//reading the encrpt_msg in blocks of 4
for(int j = 1; j <= 16; j++)

{
curr_block[(j - 1) % 4] = encrpt_msg[j-1];
//when we have a block of 4

if(j % 4 == 0){
//converting the block to int
int *temp = (int*)curr_block;
//subtracting secret key from

int *temp = *temp - i;
//converting int back to char
char* temp1= (char*)temp;
for(int k = 0; k < 4; k++)

{
decrpt_msg[j - 4 + k] = temp1[k];

}

}

}
decrpt_msg[16] = '\0';
cout<<"Key: "<<i<<"\tDecrypted msg: "<<decrpt_msg<<endl;
return 0;

}
Output:
The secret key is: 491

Decrypted message: Attack at dawn!!


Related Solutions

Your country is at war and your enemies are using a secret code to communicate. You...
Your country is at war and your enemies are using a secret code to communicate. You have managed to intercept a message that reads as follows: ,vtaNm a_"dabp!! The message is 16 characters long. The message is encrypted using the enemy’s secret code. You have just learned that the encryption algorithm is to take the original message, treat each group of 4 bytes like an integer, add a secret key to the integer, then copy the resulting number to the...
Whales communicate with one another using sound. What are the benefits of using sound to communicate...
Whales communicate with one another using sound. What are the benefits of using sound to communicate underwater? What are the costs?
Before the Civil War, the South was the wealthiest region in the country. After the war,...
Before the Civil War, the South was the wealthiest region in the country. After the war, it was the poorest, especially the cotton states of Georgia, Alabama, Mississippi, Louisiana and South Carolina. This poverty would remain characteristic of the region for more than a century. Discuss the reasons why the South fell into poverty and remained there for such a long time.
write code to manage a linked list using recursive approach. (Using this code) C++ IN Unix....
write code to manage a linked list using recursive approach. (Using this code) C++ IN Unix. // app.cpp #include <iostream> #include "linkedlist.h" using namespace std; void find(LinkedList& list, char ch) {    if (list.find(ch))        cout << "found ";    else        cout << "did not find ";    cout << ch << endl; } int main() {    LinkedList   list;    list.add('x');    list.add('y');    list.add('z');    cout << list;    find(list, 'y');    list.del('y');    cout...
Please, write code in c++. Using iostream and cstring library. Your friend is the person who...
Please, write code in c++. Using iostream and cstring library. Your friend is the person who does not like any limitations in the life. And when you said to him that it is totally impossible to work with integer numbers bigger than 4 294 967 296 in C++ he blamed you in time-wasting during the university study.So to prove that you hadn't waste 2 months of your life studying C++ in university you have to solve this issue. Your task...
Using pseudocode or C++ code, write code to print “small” if the magnitude M of an...
Using pseudocode or C++ code, write code to print “small” if the magnitude M of an earthquake is in the range [0, 3), “medium” if M is in the range [3, 6), “large” if M is in the range [6, 9) and “epic” if M is greater than or equal to 9, where M is input by a user via the keyboard. (in c++)
code in c++ using the code given add a hexadecimal to binary converter and add a...
code in c++ using the code given add a hexadecimal to binary converter and add a binary to hexadecimal converter #include <iostream> #include <string> #include<cmath> #include<string> using namespace std; int main() { string again; do { int userChoice; cout << "Press 2 for Decimal to Binary"<< endl; cout << "Press 1 for Binary to Decimal: "; cin >> userChoice; if (userChoice == 1) { long n; cout << "enter binary number" << endl; cin>>n; int decnum=0, i=0, remainder; while(n!=0) {...
Write a code using c# Maximum Sub Array.
Write a code using c# Maximum Sub Array.
Using C# Windows App Form Create a simple calculator using +,-,*,/ Please show code GUI Code...
Using C# Windows App Form Create a simple calculator using +,-,*,/ Please show code GUI Code for calculator menus radio button input text boxes
Provide your reason as to why most frauds are committed from employees (enemies within)
Provide your reason as to why most frauds are committed from employees (enemies within)
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT