【问题标题】:System.IO - Does BinaryReader/Writer read/write exactly what a file contains? (abstract concept)System.IO - BinaryReader/Writer 是否准确读取/写入文件包含的内容? (抽象概念)
【发布时间】:2014-02-07 23:52:04
【问题描述】:

我对 C# 比较陌生,正在尝试使用 Visual Studio 表单将我在 wxMaxima 中设计的文本加密算法改编为 C# 中的二进制加密程序。因为我是读取/写入二进制文件的新手,所以我对尝试读取或写入文件流时会发生什么缺乏了解。

例如,不是像过去那样加密文本文件,而是说我想加密可执行文件或任何其他形式的二进制文件。

这里有几个我不明白的问题:

  1. 当我打开一个文件流并使用 binaryreader 时,它会读取文件中所有内容的绝对副本吗?例如,我希望能够读取整个文件,删除原始文件,然后使用旧名称创建一个新文件并将整个二进制流写回。这会完全复制原始文件还是会出现某种必须以其他方式解决的损坏?

  2. 因为它是一个加密程序,我希望添加一个功能,在删除原始文件之前对其进行低级“格式化”,这样理论上就无法通过组合硬盘的物理数据来访问它。如果我使用 binarywriter 用乱码覆盖原始文件的部分内容,它将被放在硬盘上的同一位置,还是文件会变得碎片化,实际上只是通过 FAT 重定向到硬盘的其他部分?显然,如果它没有覆盖硬盘上的原始集群,那么用乱码覆盖原始文件是没有意义的。

【问题讨论】:

    标签: filestream .net binaryreader binarywriter data-security


    【解决方案1】:

    对于您的第一个问题:BinaryReader 不是您想要的。这个名字有点误导:它“将原始数据类型读取为特定编码中的二进制值”。你可能想要FileStream

    关于第二个问题:这并不容易:请参阅SDelete 的“SDelete 工作原理”部分以获取解释。简要摘录,以防将来链接中断:

    “安全删除没有特殊属性的文件相对简单:安全删除程序只是用安全删除模式覆盖文件。更棘手的是安全删除 Windows NT/2K 压缩、加密和稀疏文件,并安全地清理磁盘可用空间。

    压缩、加密和稀疏由 NTFS 在 16 个集群块中管理。如果程序写入此类文件的现有部分,NTFS 会在磁盘上分配新空间来存储新数据,并在写入新数据后,释放文件先前占用的簇。"

    【讨论】:

    • 非常感谢您提供的信息。我在想你会打开一个文件流,然后使用 binaryreader 来读取它。我担心 NTFS 系统会这样做(不敢相信我称它为 FAT - 这就是我阅读基本计算机科学体系结构以来的时间)。我会做更多的研究,看看我是否可以创建一些允许我通过指针/引用访问硬盘的东西。我并没有真正将它用于任何事情 - 只是为了磨练技能。但是把它发布出去也无妨,所以我更愿意给人们这个选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 2011-04-23
    • 2013-02-01
    • 2013-12-08
    • 2021-01-03
    相关资源
    最近更新 更多