Vernam密码

时间:2015-10-15 18:36:46

标签: c++

我正在尝试编写代码来实现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);
}

1 个答案:

答案 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 ++。