【发布时间】:2014-04-27 22:46:49
【问题描述】:
我需要读取文本、二进制或组合的大文件(例如 JPEG 文件),对其进行加密,然后将其写入文件。稍后,我将需要读取加密数据并对其进行解密。 最终目标是验证解密数据是否与原始数据匹配。 我的问题是,对于大于 1Meg 的大文件,我不想逐个字符地读写。我将此代码用于电话,I/O 会导致用户延迟过长。 使用纯文本文件,使用 fread() 和 fwrite() 将数据转换为二进制,结果与原来的不同。对于 jpeg 图像,似乎有一些文本内容与二进制数据混合在一起。 有没有办法有效地读取任意类型的文件并以原始格式写回? 还是逐个字符是唯一的选择? 还是我还是不走运?
【问题讨论】:
-
为什么文件的内容很重要?只需使用适用于原始字节块的算法(“二进制模式”)。
-
将其分解为更小的任务。发布您尝试过的内容。
-
"对于纯文本文件,使用 fread() 和 fwrite() 将数据转换为二进制,我无法将最终结果与原始结果进行比较。" 我不不跟随。为什么不能将最终结果与原始结果进行比较?例如,您可以使用
memcmp或std::vector<unsigned char>::operator=,或您喜欢的任何其他比较机制。 -
C++ 允许缓冲文件读取,因此您不会因读取字节而牺牲太多速度。只需确保在打开文件进行阅读时缓冲文件即可。
-
@ChrisLaplante 你是对的。事实证明,明文和密文的缓冲区在解密函数中被交换了。二进制工作得很好。谢谢大家!
标签: c++ encryption text-files binaryfiles large-files