【问题标题】:How to combine ASCII text files, then encrypt, then decrypt, and put into a 'File' Class? C++如何组合 ASCII 文本文件,然后加密,然后解密,并放入一个“文件”类? C++
【发布时间】:2011-02-03 14:05:20
【问题描述】:

例如,如果我有三个 ASCII 文件:

file1.txt
file2.txt
file3.txt

...我想将它们组合成一个加密文件:

database.txt 

然后在应用程序中,我将解密 database.txt 并将每个原始文件放入堆上的“文件”类中:

class File{
public:
    string getContents();
    void setContents(string data);
private:
    string m_data;
};

有没有办法做到这一点?

谢谢

【问题讨论】:

  • 可以在 C++ 中完成。你真正的问题是什么?你想用加密来完成什么?如果 File 类有一个 setContents 函数,那应该只是改变内存中的解密版本,还是将新内容写回磁盘上的加密文件?
  • 我只是不想让最终用户看到这些文件,仅此而已。它将解密内存中的文件。谢谢
  • 用户也可以读取内存。如果您想对典型用户隐藏数据,请为该文件指定一个自定义扩展名(例如,.dfr 表示项目“r”的数据文件)。
  • 这对我来说感觉像是三个问题:(1)如何将 3 个文件合并为 1 个,然后再次拆分它们(又名:归档,但一种特殊情况); (2)如何在攻击者控制下运行的程序中加密数据以进行解密(AKA:DRM,一般来说是一个无法解决的问题,因此需要更多信息); (3) 如何将数据复制到包含在堆分配结构中的字符串中。这些是完全不同级别的编程任务,您是否需要所有三个方面的帮助,或者您是否可以单独处理它们,您只是想知道是否有一种特别好的方法可以同时完成所有三个?

标签: c++ encryption file


【解决方案1】:

只使用zip 文件?
您当然可以滚动自己的标头元数据来存储文件名,但是这个特殊的轮子已经被重新发明了足够多的时间。

如果你需要比 zlib 提供的更好的加密,那么你可以在你的平台上使用 crypt 函数,或者很容易实现类似blowfish的东西

【讨论】:

  • 确实;可能是最好的解决方案,除非存在许可问题或硬件限制。
【解决方案2】:

如果您不想使用预先存在的文件格式,请制作自己的简单文件格式。

这样的布局应该可以工作:

class DatabaseFile {
    private:
        struct FileHeader {
            uint32_t fileId;
            uint32_t fileSize;
            char data[0];
        };

        File readFile(...) {
            read();
            decrypt();
        }

        File writeFile(...) {
            encrypt();
            write();
        }

    public:
        DatabaseFile();
        DatabaseFile(std::vector<File> files);

        static DatabaseFile read(std::istream) {
            while(!eof) {
                readFile();
            }
        }

        void write(std::ostream) {
            foreach(file) {
                writeFile();
            }
        }

        std::vector<File> files;
};

class DatabaseFileEncryption {
    // However you want it ...
};

【讨论】:

    猜你喜欢
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 1970-01-01
    • 2020-06-18
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多