我最近的开启是使用BinaryFormatter而不是某些数据库产品。我有一个想法是将简单的64位数写入硬件加密狗,并用它加密我的文件 - 通过简单的XOR操作。只是因为它在另一端无法读取。我是从Stream派生出来的,还是什么?
我知道我可以简单地将这个数字放入文件中并在阅读时检查它,但是......如果它一直被XORed,我会感觉更好。
答案 0 :(得分:2)
请注意,如果另一端知道有关原始数据的信息,那么XOR将非常容易破解。如果它在任何位置知道正确的8个字节,那么您的“加密”会立即被破坏。你确实确定要这样做吗?提出自己的加密方案几乎总是一个坏主意 - 你有什么理由不想使用框架中内置的众多加密算法之一吗?当然,使用硬件加密狗来获取密钥 - 但随后使用普通CryptoStream
。
但是,如果你真的想这样做,有两个明显的选择:
构建一个流包装器,是的。除非你真的需要支持异步操作,否则我不会这样做 - 它会让事情变得更加艰难。编写一个流实现,它将另一个流代理到,并将long
值与XOR一起使用,然后每当您读取或写入数据时,都应用XOR。
构建ICryptoTransform
的实现。然后,您可以让CryptoStream
根据流内容完成所有繁重工作 - 您只需要知道如何一次转换块。我相信应该非常简单,但我不能说我自己做过。
答案 1 :(得分:1)
我不打算评论XOR加密,这太傻了。让我们专注于实现您的自定义流的实用指南。您应该从Stream派生它,以便它具有熟悉的用户界面。右键单击“Stream”,实现Abstract Class。您可以将大多数NotImplementedException抛出到位,流通常会像这样瘫痪。添加一个私有的FileStream成员,它将完成艰苦的工作。然后添加: