不读所有文件

时间:2013-06-30 08:21:21

标签: c++ encryption

我正在尝试使用简单的解密算法来解密某些文件。到目前为止,我所拥有的代码大部分都可以工作,但是在几百个字节后停止读取并导出它所拥有的代码。 例如,我有一个.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
+"Òû%÷*&$'
ëÐ!ÐÎ&"# ëÐ"!Ý "

Ü"ÐÎÝ컸

1 个答案:

答案 0 :(得分:1)

因此,假设(t += 251 - ((i * 14) & 255))的结果是字符范围内的任何值,则需要将该文件作为“二进制”文件进行读写,否则内容将无法“正常工作”。

这意味着您需要使用stream::read来读取数据块并使用stream::write将数据写入输出文件,当您打开文件时,需要提供{{1} }和ifstream::binary分别作为模式。

文本输入(当您未在模式中指定ofstream::binary时)将某些输入字节解释为binary(停止输入),将其他输入字节解释为end of file个字符(如果您使用newline将在输入时被忽略。由于在加密形式中,您不使用这些字符来表示那些内容,因此不应使用基于文本的输入(加密文件不是文本文件)。