加密/解密初学者问题

COD*_*ODe 7 .net c# encryption visual-studio-2008

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

http://www.newsoftwares.net/folderlock/

无论如何,我处于初始阶段并且有一些初步问题.

  1. 当您加密文件夹时,您实际上正在加密文件夹内的所有文件,而不是文件夹本身,因为文件夹无法加密.那是对的吗?

  2. 此外,我已经编写了我的加密/解密代码,但我想要加入密码.我的计划是,当用户选择要加密的文件夹/文件时,让他们设置一个密码,该密码将链接到解密文件夹/文件所需的密钥.好主意还是坏主意?有人有更好的建议吗?我正在讨论为程序本身设置一个密码来解锁任何加密的文件/文件夹...

  3. 如何更改一个文件夹在Windows 7(我已加密),当它被打开,而不是只打开并显示所有加密文件要求输入密码?

  4. 最后,当你对文件进行加密,(与如何我的代码正在写的)你结束了,你加密的原始文件,该文件的加密版本.我确定我知道答案,但是我是否删除了原始版本并保留了加密版本?如果由于某种原因,解密失败并且我没有备份我的文件怎么办?我也应该创建文件备份吗?

谢谢你的帮助!我也尝试谷歌搜索上述问题,但似乎谁在做这个是比我高得多的水平大多数人,所以我没有找到许多有用的答案.

编辑:让我解释一下,当我尝试创建类似于FolderLock的东西时,这仅适用于我的教育.我不打算创建一个商业上可行的应用程序,只是做一些有趣的事情并同时学习.

Can*_*cer 3

如何加密文件和文件夹并不是一个只有单一答案的问题。当我们谈论 Windows 环境时,您可以对文件进行大约三个不同级别的加密:

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

  2. 筛选器驱动程序或文件系统加密:您可以编写自己的筛选器驱动程序或文件系统驱动程序,以便在文件写入磁盘时有选择地、透明地加密和解密文件。大多数面向企业的加密解决方案都提供这种功能。微软有自己的解决方案,即加密文件系统。这样做的好处是它与操作系统更好地集成,加密的文件和文件夹对于所有其他应用程序来说看起来就像普通文件。TrueCrypt是另一个进行此类加密的程序,并且它是开源的,因此您可能想看一下它。

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

我假设您正在寻找编写一个将在应用程序级别进行加密的应用程序。在这种情况下,您应该意识到我上面提到的这种方法的局限性。

至于你的问题:

  1. 您可以将文件夹加密到容器中,再次考虑 WinZip/WinRar,或者您可以将文件夹中的每个文件单独加密到其单独的文件中。

  2. 对于密码/密钥的使用,我的建议是使用随机密钥来加密实际数据。然后,您可以使用从一个或多个密码派生的密钥在单独的密钥槽中加密该密钥。这将允许您为一个文件设置多个密​​码。至于算法,我推荐 AES-128,因为它是一种经过充分验证且非常快的算法。要使用 AES,您需要创建特定长度的密钥和 IV(AES-128 各 128 位)。创建这些密钥的最佳方法是将Rfc2898DeriveBytes与用户输入的实际密码一起使用。不要忘记HMAC,您应该使用它来验证文件的实际解密是否正确。您可以使用 HMAC 仅验证随机密钥是否已正确解密,这意味着您不需要对整个内容运行 HMAC。

  3. 为此,您需要编写一个 shell 扩展,但这只能让您到目前为止。例如,您将无法将文件从 word 保存到加密文件夹中,因为这实际上只是加密文件的容器格式。

  4. 我建议您将其留给用户来创建文件备份。任何删除的文件也应该被安全地擦除,因为简单的删除不足以从文件系统中删除文件的所有痕迹。