C# 加密/解密初学者问题

C# 加密/解密初学者问题,c#,.net,visual-studio-2008,encryption,C#,.net,Visual Studio 2008,Encryption,我从未做过任何加密或解密,所以我决定跳进去,尝试做一些类似FolderLock的东西。下面的问题主要是设计问题,但混合了一些编码问题 不管怎样,我还处于初始阶段,有一些初步的问题 加密文件夹时,实际上是在加密文件夹中的所有文件,而不是文件夹本身,因为文件夹无法加密。对吗 另外,我已经编写了我的加密/解密代码,但我想在其中加入一个密码。我的计划是,当用户选择要加密的文件夹/文件时,让他们设置一个密码,该密码将链接到解密该文件夹/文件所需的密钥。好主意还是坏主意?有谁有更好的建议吗?我正在辩论是否

我从未做过任何加密或解密,所以我决定跳进去,尝试做一些类似FolderLock的东西。下面的问题主要是设计问题,但混合了一些编码问题

不管怎样,我还处于初始阶段,有一些初步的问题

  • 加密文件夹时,实际上是在加密文件夹中的所有文件,而不是文件夹本身,因为文件夹无法加密。对吗

  • 另外,我已经编写了我的加密/解密代码,但我想在其中加入一个密码。我的计划是,当用户选择要加密的文件夹/文件时,让他们设置一个密码,该密码将链接到解密该文件夹/文件所需的密钥。好主意还是坏主意?有谁有更好的建议吗?我正在辩论是否有一个程序本身的密码可以解锁任何加密的文件/文件夹

  • 如何更改Windows 7中的文件夹(已加密),使其在打开时请求密码,而不仅仅是打开并显示所有加密文件

  • 最后,当你加密一个文件时,(我的代码当前是如何编写的),你会得到你加密的原始文件和该文件的加密版本。我确信我知道答案,但是我是否删除了原始版本并保留了加密版本?如果由于某种原因,解密失败,而我没有文件备份,该怎么办?我也应该创建文件备份吗

  • 谢谢你的帮助!我曾尝试用谷歌搜索上述问题,但似乎大多数这样做的人都比我高出很多,所以我没有找到很多有用的答案

    编辑:让我解释一下,虽然我试图创建类似FolderLock的东西,但这只是为了我的教育。我不是在尝试创建一个商业上可行的应用程序,只是在做一些有趣的事情的同时学习。

  • 文件夹只是文件的集合。就您的应用程序而言,它可以只加密文件夹的内容
  • 您应该使用密码来派生密钥。在.NET中,您可以使用。这意味着您甚至没有存储密钥。密码就是钥匙。如果可以避免的话,千万不要自己保管钥匙。这样,攻击者的唯一选择就是暴力;逆向工程不会产生任何有用的东西
  • 你可能需要写一封信才能做到这一点。那是完全不同的主题。(我希望您对COM Interop/PInvoke感到满意)
  • 这一切都取决于你想要多少“验证”。例如,您可以计算原始文件的SHA-256散列;加密;然后解密;对解密后的文件进行散列;并确保哈希匹配。诀窍是将所有这些作为一个原子操作来完成。您可能还希望存储未加密文件的SHA-256(即使在删除未加密内容之后),以便以后解密时使用;您可以验证它是否正确执行。在本例中,您将哈希用作校验和

  • 如何加密文件和文件夹不是一个简单的问题。当我们谈论Windows环境时,您可以在大约三个不同的级别加密文件:

  • :在这种情况下,您加密整个硬盘,这意味着整个硬盘是加密的。这就是一个例子。在这种情况下,除了主引导记录之外,您可以加密所有内容。写入硬盘的每个字节都是加密的,包括操作系统

  • 过滤器驱动程序或文件系统加密:您可以编写自己的过滤器驱动程序或文件系统驱动程序,以便在文件写入磁盘时有选择地、透明地加密和解密文件。大多数面向业务的加密解决方案都提供这种功能。微软有自己的解决方案,形式为。这样做的好处是,它可以更好地与操作系统集成,加密的文件和文件夹在所有其他应用程序中看起来都像普通文件。是另一个做这种加密的程序,它是开源的,所以你可能想看看它

  • 应用程序级加密:您还可以在应用程序级加密我想调用的文件。如果您不编写自己的筛选器驱动程序,您将无法达到此级别。这意味着您要加密一个文件,加密方式与使用WinZip压缩文件的方式类似。其他应用程序可以将加密文件视为不同格式的文件,而不是原始格式的文件。从本质上讲,它与使用WinZip/WinRAR压缩文件没有太大区别,只是不压缩文件,而是对其进行加密。如果使用WinZip压缩文件夹,它仍然会被压缩到单个文件中。如果您要在这个级别上进行加密,则与加密相同。您可以为Windows资源管理器编写外壳扩展,使其“看起来”像一个文件夹,但本质上它仍然是一个文件,您将无法从另一个应用程序“另存为…”到该文件夹中。例如,如果双击某个文件夹,您可能还需要提供用于浏览该文件夹的GUI

  • 我假设您希望编写一个在应用程序级别进行加密的应用程序。在这种情况下,您应该知道我上面提到的这种方法的局限性

    关于你的问题:

  • 您可以将文件夹加密到一个容器中,再次考虑WinZip/WinRar,或者您可以将文件夹中的每个文件分别加密到各自的文件中

  • 对于密码/密钥的使用,我建议使用随机密钥来加密实际数据。然后使用从一个或多个密码派生的密钥在单独的密钥组中加密此密钥。这将允许您拥有一个文件的多个密码。至于算法,我推荐AES-128,因为它是一种经过验证的非常快速的算法。使用