我的作业是制作一个加密/解密程序,用户输入的信息和一个字母数相同的密钥。 程序对消息进行加密并显示消息然后解密密码并再次显示消息。 我有一个解密密码的问题,当我写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;
}
答案 0 :(得分:0)
'Z'= 25 'L'= 11
因此(25 + 11)%26 = 10
当你去解密时,(10 - 25)%26 = -15
然后取这个绝对值,将其设置为15.相反,当解密值为&lt;时,要做的是正确的事情。 0是加26.这会把-15变成11. 11 ='L'。