我想将.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 ,但是在第一次迭代后不打印任何内容。我不确定代码的哪一部分不正确。
我的代码的输出-
最佳答案
您没有更改“密钥”。也许您需要使用“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;
}