사용자로부터 입력을 수집 한 다음 &을 암호화하여 해당 문자를 해독하는 프로그램을 만들어야합니다.함수 사이의 변수 공유 - rand() srand
코드 작성에 자신이 없기 때문에 코드의 많은 부분이 잘못 작성되어 모범 사례를 따르지 않을 것이라고 생각합니다. 따라서 프로그램이 단순히 값을 더하기/빼기하는 알고리즘의 간단한 버전을 작성했습니다 2에서/ASCII 값을하지만 rand() 및 srand 함수 사용을 발견했지만 내 암호화 및 암호 해독 함수 내에서 단일 값 (정적 변수?) 내에서 사용하는 방법을 잘 모르겠습니다.
여기 내 코드가 현재 전체적으로 나와 있습니다.
#include <iostream >
#include <iomanip>
#include <cstdlib>
#include <ctime>
#include <string>
#include <cstring>
#include <fstream>
using namespace std;
char getMenuSelection (char m);
void encrypt (char key[]);
void decrypt (char code[]);
int main()
{
ifstream input;
ifstream in;
ofstream out;
char menu;
char message[80];
//char codekey;
//char myname[128];
menu = 0;
menu=getMenuSelection(menu);
if (menu == 'e' || menu == 'E') //Option to Encrypt
{
cout << "Enter Message to be encrypted \n";
cin >> message;
input.open (message);
encrypt (message);
input.close();
cout << "The Ciphertext is: " << message << endl;
return main();
}
if (menu == 'd' || menu == 'D')
{
cout << "Enter Ciphertext to decrypt \n";
cin >> message;
input.open (message);
decrypt (message);
input.close();
cout << "The Decrypted message is: " << message << endl;
return main();
}
if (menu == 'q' || menu == 'Q')
{
cout << "Program exiting.";
cin.ignore();
return 0;
}
cin.ignore();
return 0;
}
char getMenuSelection (char m) // Get the menu function
{
cout << "|||_______Welcome To Elliotts Encryption_______|||\n";
cout << "|||__________and Deciphering Program___________|||\n";
cout << "|||____________________________________________|||\n";
cout << "|||______Please select 'E' to encrypt a________|||\n";
cout << "|||____message, 'D' to decipher a message______|||\n";
cout << "|||______________Or 'Q' to Quit________________|||\n";
cin >> m;
switch (m)
{
case 'e':
case 'E': cout << "Encryption." << endl;
break;
case 'd':
case 'D': cout << "Decryption." << endl;
break;
case 'q':
case 'Q': cout << "Quitting" << endl;
break;
default: cout << "Error, Please try another message. ";
return getMenuSelection(m);
}
return (m);
}
int random (int r)
{
srand(time(0));
r=rand();
return r;
}
void encrypt (char key[], int r) //encryption function.
{
for(int i = 0; i <= 40; i++) key[i] += r;
}
void decrypt (char code[], int r) //decryption function.
{
for(int i = 0; i <= 40; i++) code[i] -= r;
}
이 코드는 현재 인해 암호화 '에 대한 정의되지 않은 참조'(숯불 *) '내가 난수를 생성하고이를 통합하는 방법을 요구하고
질문에 실행되지 않습니다 내 암호화 및 암호 해독 기능에.
- 정적 또는 전역 변수를 사용하면이 작업을 그대로 적용 할 수 있습니까?
- 두 기능에 대해 별도의 클래스 파일을 만들어야합니까?
- 다른 가능한 방법은 있습니까?
나는 정확한 코드가 주어지지 않을 것이라는 것을 이해하지만, 누군가 올바른 방법으로 나를 가리키거나 내가 잘못 가고 있다고 말할 수 있다면 크게 도움이 될 것입니다.
감사합니다.
암호화에 임의의 숫자를 사용하려면 (1) 사용자와받는 사람 모두 알고리즘이 동일해야합니다 ("로컬 컴파일러의 rand()"가 아님). 그리고 (2) 둘 다 RNG는 시계처럼 무작위가 아닌 동일한 키 값으로 시드합니다. 이러한 작업을 모두 수행하는 경우 메시지의 각 문자를 RNG의 숫자로 추가하거나 xor와 같이 간단한 작업을 수행 할 수 있습니다. 본질적으로 일회용 패드를 복제합니다. 그렇다면 핵심 교환에 대해 걱정할 필요가 있습니다. –