我想将.txt文件中的所有ASCII值与所有ASCII值最大为256进行XOR。我的输入.txt文件包含十六进制格式的ASCII值。因此,例如,我的输入文件具有“49 f3 54 f3 5f f3 47 f4 43 e8 49 e9” ,我想对每个值与0x00进行异或运算,然后依次输入0x01、0x02、0x03等,然后将结果打印为新每个十六进制值的行。我已经用C++编写了以下代码,但始终会打印原始内容。

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

int main() {

vector <char> decrypt;
char ch;
int index;

ifstream infile;
ofstream outfile;

infile.open("prob3.txt");
outfile.open("results3_p1.txt");

if(!infile)
{
    cout << "Error opening input file" << endl;
    return 0;
}

for (int a = 0; a < 256; a++)
{

    while(infile >> hex >> index)
    {
        ch = index ^ a;
        decrypt.push_back(ch);
    }

    for (int i=0; i<decrypt.size(); i++)      // Print the results
    {
        outfile << decrypt[i];
    }
    outfile << endl;

}

return 0;
}

我试图使用“decrypt.clear()”清除 vector ,但是在第一次迭代后不打印任何内容。我不确定代码的哪一部分不正确。

我的代码的输出-

c&#43;&#43; - 将ASCII值循环到XOR输入-LMLPHP

最佳答案

您没有更改“密钥”。也许您需要使用“a”代替?

第一次迭代后,您将到达文件末尾。您可能需要重置文件指针。但这效率不高。如果您遇到这种情况,您可能总是在同一解密数组中进行迭代(在第一次迭代中初始化)

最好将文件中的所有值存储在某个数组中,然后遍历该数组。

我建议类似:

while(infile >> hex >> index)
{
       decrypt.push_back(index);
}
for (int a = 0; a < 256; a++)
{
    for (int i=0; i<decrypt.size(); i++)      // Print the results
    {
        ch = decrypt[i] ^ a;
        outfile << ch;
    }
    outfile << endl;
}

10-07 22:16