加密/解密程序C ++

时间:2015-12-02 20:00:27

标签: c++ encryption codeblocks

我的作业是制作一个加密/解密程序,用户输入的信息和一个字母数相同的密钥。 程序对消息进行加密并显示消息然后解密密码并再次显示消息。 我有一个解密密码的问题,当我写HELLO并且密钥是JHBZA时它显示HELPO而不是HELLO。代码中的问题是什么?

       #include <iostream>
#include <string>
#include <iomanip>
using namespace std;

int main()
{
    char message[100], key[100], encryption[100], decryption[100];
    int msgvalue [100], msgvalue2 [100], keyvalue [100], keyvalue2 [100], sum[100], decryptvalue[100], decryptvalue2[100];
    int i=0;

cout << "Enter the message: ";
cin.getline(message, 100);
while(message[i] != '\0')
{

    msgvalue[i] = message[i];
    msgvalue2[i] = msgvalue[i] - 65;
    i++;
}

i=0;

cout << "Enter the key: ";
cin.getline(key, 100);
while(key[i] != '\0')
{
    keyvalue[i] = key[i];
    keyvalue2[i] = keyvalue[i] -65;
    i++;
}



cout << "The message is: " << setw(15) << message << endl;
for(int i = 0; msgvalue[i] > 1; i++)
{
sum [i] = msgvalue2[i] + keyvalue2[i];
sum[i] = sum[i] % 26;
}



cout << "The cipher is: " << setw(12);

for(int i = 0; msgvalue[i] >= 65 && msgvalue[i] <= 90; i++)
{
 encryption[i] = sum[i] + 65;

 cout << encryption[i];
}


cout << endl << "The message again is: " << setw(12);

for(int i = 0; msgvalue[i] >= 65 && msgvalue[i] <= 90; i++)
{
decryptvalue[i] =(sum[i] - keyvalue2[i]) % 26;

if (decryptvalue[i] < 0)
{
    decryptvalue[i] = -decryptvalue[i] ;
}


decryptvalue2[i]  = decryptvalue[i] + 65;

decryption[i] = decryptvalue2[i];

cout << decryption[i];

}


    return 0;
}

enter image description here

1 个答案:

答案 0 :(得分:0)

'Z'= 25 'L'= 11

因此(25 + 11)%26 = 10

当你去解密时,(10 - 25)%26 = -15

然后取这个绝对值,将其设置为15.相反,当解密值为&lt;时,要做的是正确的事情。 0是加26.这会把-15变成11. 11 ='L'。