【问题标题】:Encrypt / decrypt XOR with using the alphabet characters [duplicate]使用字母字符加密/解密 XOR [重复]
【发布时间】:2014-08-01 12:52:49
【问题描述】:

我编写了一个简单的程序来加密和解密消息 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;
}

例如,如果我有输入消息:string 加密后:swrnpf 解密后:svrkre

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

【问题讨论】:

    标签: c++ encryption cryptography xor


    【解决方案1】:

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

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

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

    【讨论】:

    • 正确。甚至没有一个单一的明文密钥组合是唯一可逆的......
    • 感谢您的帮助!我明白哪里错了。
    猜你喜欢
    • 1970-01-01
    • 2020-03-20
    • 2022-09-22
    • 1970-01-01
    • 2013-04-20
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    相关资源
    最近更新 更多