我有这个代码根据[pdf]加密数据。1 我遇到的问题是代码产生正确的输出。当我“cat”输出文件时,我得到了正确的答案,但是如果我在文本编辑器中打开文件,我会得到如下结果:
0068 6e74 7264 727a 0073 7558 6569 7965 0061 6779 686f 6570 0064 6d62 6465 6358 0074 7265 6568 6168 0075 7058 5862 7469 0065 6e72 6d65 676c 0073 6377 6864 6e6f 0073 6d6e 7479 7465 006c 6775 5869 6561
预期输出为:
hntrdrzsuXeiyeagyhoepdmbdecXtreehahupXXbtienrmeglscwhdnosmntytelguXiea
使用此字符串作为原始参数和Keys:CORNFLAKES和BLACKHORSE
sendresupplytothebridgebythechurchXXammoneededurgentlywithmagazinesXXX
这是一个内存问题,我的流失败了吗?我觉得我忽视了一些我看不到的东西。
这是加密的方式:
string encrypt(string &key, string &toEncrypt)
{
int height= 1;
string result = "";
vector<vector<char> > matrix(key.length(), vector<char>(2));
string::iterator it=toEncrypt.begin();
for (int i = 0; i < key.length(); i++)
{
matrix[i][0] = key.at(i);
}
// put info into matrix
printf("%s\n", key.c_str());
while( it!=toEncrypt.end()) // while string still has more chars
{
//printf("newline----\n");
for (int col = 0; col < key.length(); col++,it++)
{
if (it != toEncrypt.end())
{
if(*it == '\0'){it++;}
matrix[col].push_back(*it);
printf("%c", *it);
continue;
}
if(col < key.length())
matrix[col].push_back('X');
printf("%c", 'X');
}
height++;
printf("\n");
}
//parse trough the matrix
printf("\n");
BubbleSort(matrix);
printf("\n");
printf("PAST BUBBLE SORT\n");
for (int c = 0; c < key.length(); c++)
{
for (int r= 1; r < matrix[0].size(); r++)
{
result += matrix[c][r];
printf("%c",matrix[c][r]);
}
printf("\n");
}
printf("THE RESULT IS%s\n", result.c_str());
return result;
}
这就是我写文件的方式:
string file = "\0";
printf("Please Enter the name of the file that contains the text to be encrypted with the extention.\n");
getline(cin, file, '\n');
string line;
string encrypted;
transposition_encr encryptor = transposition_encr(k1,k2);
ifstream myfile (file.c_str());
if (myfile.is_open())
{
while ( getline (myfile,line) )
{
encrypted += line;
}
myfile.close();
}
else
{
cout << "Unable to open file\n";
return -1;
}
cout << encrypted << endl;
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
cout<< encrypted << endl;
encrypted = encryptor.encryption(line);
cout<< encrypted << endl;
string str = "outputfile-encrypted-str.txt";
ofstream myfile2(str.c_str());
if (myfile2.is_open())
{
myfile2 << encrypted;
myfile2.close();
}
// else cout << "Unable to open file\n";
以下是代码<{3}}
答案 0 :(得分:2)
你从
开始vector<char>(2)
作为matrix
中的默认元素,然后push_back()
作为默认元素。最后,你用
for (int r= 1; r < matrix[0].size(); r++)
但仍留有空字节。您可能希望从空向量开始并使用其所有元素。