我正在尝试使用简单的解密算法来解密某些文件。到目前为止,我所拥有的代码大部分都可以工作,但是在几百个字节后停止读取并导出它所拥有的代码。 例如,我有一个.X文件,它是14.7KB。我通过程序运行它,它出现了643字节。 目前的代码在这里:http://pastebin.com/aNNjYTzg 由于这个网站的代码格式化让我疯了......
我刚刚将算法添加到现有代码中,因此大多数代码都没有使用。
编辑:
cout << "Enter the name of your file to " << encrypt_decrypt[choice-1] << ": ";
cin >> filename;
in.open(filename);
getline(in,buffer);
void encryptdecrypt(const string buffer,const char map[],int len,string& newbuffer)
{
int i=0;
char t;
char code;
for (i=0;i<buffer.length();i++)
{
t=buffer[i];
(t += 251 - ((i * 14) & 255));
cout << "Buffer length: " << buffer.length() << endl;
cout << "newbuffer length: " << newbuffer.length() << endl;
newbuffer.push_back(t);
}
newbuffer.push_back('\n');
}
out << newbuffer;
EDITx2: 读取整个文件,但只解密起始部分。
<?xml version="1.0"?>
<Materi
+"Òû%÷*&$'
ëÐ!ÐÎ&"# ëÐ"!Ý "
Ü"ÐÎÝ컸
答案 0 :(得分:1)
因此,假设(t += 251 - ((i * 14) & 255))
的结果是字符范围内的任何值,则需要将该文件作为“二进制”文件进行读写,否则内容将无法“正常工作”。
这意味着您需要使用stream::read
来读取数据块并使用stream::write
将数据写入输出文件,当您打开文件时,需要提供{{1} }和ifstream::binary
分别作为模式。
文本输入(当您未在模式中指定ofstream::binary
时)将某些输入字节解释为binary
(停止输入),将其他输入字节解释为end of file
个字符(如果您使用newline
将在输入时被忽略。由于在加密形式中,您不使用这些字符来表示那些内容,因此不应使用基于文本的输入(加密文件不是文本文件)。