我正在尝试编写代码来实现C ++中的vernam密码,但是我的代码没有运行。我不知道问题是什么。代码将获得零,一和密钥的消息,然后实现它们的XOR以创建密文和解密方法相同,当我运行它时,它会给我一个警告并停止运行。
#include<iostream>
#include<string>
using namespace std;
void encrypt(string msg, string key)
{
while (msg.length() > key.length())
{
key += key;
}
string encrypt_Text = "";
for (size_t i = 0; i <= msg.length(); i++)
{
encrypt_Text += msg[i] ^ key[i];
}
cout << "the cipher text is:" << encrypt_Text << endl;
}
void decrypt(string cipher, string key)
{
while (cipher.length() > key.length())
{
key += key;
}
string decrypt_Text = "";
for (int i = 0; i <= cipher.length(); i++)
{
decrypt_Text += cipher[i] ^ key[i];
}
cout << "the messege is:" << decrypt_Text << endl;
}
void main()
{
string msg, key;
cout << "enter your messege in boolean : " << endl;
cin >> msg;
cout << "enter your key in boolean : " << endl;
cin >> key;
encrypt(msg, key);
}
答案 0 :(得分:0)
在encrypt()
函数中,试试这个:
encrypt_Text+=((msg[i]-'0')^(key[i]-'0')+'0');
否则您使用的是字符的ASCII码。另外,修改循环以使其使用<
,而不是<=
。
for(size_t i=0; i<msg.length(); i++)
// ^ smaller, not smaller or equal
并将main()
的返回类型修改为int
,这是C ++。