加密/解密初学者问题

本文关键字:问题 初学者 解密 加密 | 更新日期: 2023-09-27 18:01:30

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

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

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

  1. 当你加密一个文件夹时,你实际上是在加密文件夹内的所有文件,而不是文件夹本身,因为文件夹不能加密。对吗?

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

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

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

谢谢你的帮助!我确实尝试过谷歌搜索上面的问题,但似乎大多数人都比我的水平高得多,所以我没有找到很多有用的答案。

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

加密/解密初学者问题

如何加密文件和文件夹不是一个只有一个答案的问题。当我们谈论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. 我建议您让用户自己创建文件备份。任何被删除的文件也应该被安全地擦除,因为简单的删除不足以从文件系统中删除文件的所有痕迹。

  1. 一个文件夹只是一个文件的集合。就您的应用程序而言,它可以只加密文件夹的内容。
  2. 您应该使用密码来导出密钥。在。net中,你可以使用Rfc2898DeriveBytes来实现。这意味着您甚至没有存储密钥。密码就是密钥。如果能避免,千万不要自己保管钥匙。这样,攻击者的唯一选择就是暴力破解;逆向工程不会产生任何有用的东西。
  3. 你可能需要写一个shell扩展来做这个。那是完全不同的话题。(我希望你对COM Interop/PInvoke感到舒服)。
  4. 这完全取决于你想要多少"验证"。例如,您可以计算原始文件的SHA-256哈希;加密;然后解密;对解密文件进行哈希;确保哈希值匹配。诀窍是将所有这些操作作为一个原子操作来完成。您可能还希望存储未加密文件的SHA-256(即使在删除未加密的内容之后),以便稍后解密它时;你可以验证它是正确的。在这种情况下,您使用哈希作为校验和。
  1. 是和不是。文件系统有加密标志,可以应用于文件夹。这很重要,因为在该文件夹中创建的新文件将被自动加密。但是文件夹本身没有加密。

  2. 我不太明白…如果它像TrueCrypt一样工作,那么这是一个好主意。

  3. 哪个密码?无论如何,如果它是你的加密方法,那么你必须深入挖掘Windows Shell API和对象,我不太确定这种扩展是可能与。net(我想我在某处读到它不是,实际上,它会从某种原因,我忘记失败)

  4. 我不明白为什么解密会失败。显然,任何东西都有可能失败,包括硬盘,但每个文件都可能失败,你无法保护它。