gpt4 book ai didi

c# - 加密/解密初学者问题

转载 作者:太空狗 更新时间:2023-10-29 20:37:34 24 4
gpt4 key购买 nike

我从来没有做过任何加密或解密,所以我决定加入并尝试制作类似于 FolderLock 的东西。以下问题以设计题为主,但也夹杂了一些编码题。

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

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

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

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

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

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

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

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

最佳答案

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

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

  2. 过滤驱动程序或文件系统加密:您可以编写自己的过滤驱动程序或文件系统驱动程序,以便在文件写入磁盘时有选择地透明地加密和解密文件。大多数针对业务的加密解决方案都提供这种功能。 Microsoft 有自己的解决方案,形式为 Encrypting File System .这样做的好处是它可以更好地与操作系统集成,加密的文件和文件夹对所有其他应用程序来说就像普通文件一样。 TrueCrypt是另一个进行这种加密的程序,它是开源的,因此您可能想看一看。

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

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

关于您的问题:

  1. 您可以将文件夹加密到一个容器中,再想想 WinZip/WinRar,或者您可以将文件夹中的每个文件分别加密到它们单独的文件中。

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

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

  4. 我建议您让用户自行创建文件备份。删除的任何文件也应该是 wiped securely ,因为简单的删除不足以从文件系统中删除文件的所有痕迹。

关于c# - 加密/解密初学者问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6629485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com