使用字母字符加密/解密XOR

时间:2014-06-11 12:48:17

标签: c++ encryption cryptography xor

我写了一个简单的程序,它应该加密和解密消息XOR密码。 我将范围限制在字母表中的字符(小字符)。 加密工作正常,但解密后的消息不匹配。 如果我在不受限制的情况下运行程序(没有这个%26 + 97),它就可以了。

#include <iostream>

using namespace std;

int main(){

    char message[7] = "string";
    char key[5] = "abcd";
    char encrypted[7];

    size_t sizeTab = strlen(message);

    cout << sizeTab << endl;

    cout << "ENCRYPTION" << endl;
    int i = 0;
    do{
        encrypted[i] = ((message[i] ^ key[i%4])%26 + 97);
    }while(i++ < sizeTab - 1);

    encrypted[sizeTab] = '\0';

    cout << encrypted << endl;

    cout << "DECRYPTION" << endl;
    i = 0;
    do{
        encrypted[i] = ((encrypted[i] ^ key[i%4])%26 + 97); 
    }while(i++ < sizeTab - 1);

    cout << encrypted << endl;

    return 0;
}

例如,如果我在条目上有消息:字符串 加密后: swrnpf 解密后: svrkre

我做错了什么,我应该纠正什么? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

  

如果我在没有限制字母的情况下运行程序(没有这个%26 + 97),它就可以了。

那是因为%26 + 97部分是错误的。模运算会丢失信息,这使得无法再次正确解密消息。

也许您正在寻找的是Vigenère cipher?有了它,您可以将密文保持在与明文相同的字母表中(这似乎是您尝试实现的目标),并且仍然与您的方法非常相似。