- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我从来没有做过任何加密或解密,所以我决定加入并尝试制作类似于 FolderLock 的东西。以下问题以设计题为主,但也夹杂了一些编码题。
http://www.newsoftwares.net/folderlock/
无论如何,我处于初始阶段并且有一些初步问题。
加密文件夹时,实际上是在加密文件夹内的所有文件,而不是文件夹本身,因为文件夹无法加密。对吗?
此外,我已经编写了我的加密/解密代码,但我想将密码与代码一起合并。我的计划是,当用户选择要加密的文件夹/文件时,让他们设置一个密码,该密码将链接到解密文件夹/文件所需的 key 。好主意还是坏主意?有人有更好的建议吗?我正在讨论为程序本身设置一个密码,该密码也可以解锁任何加密的文件/文件夹...
如何更改 Windows 7 中的文件夹(我已加密)以在打开时要求输入密码,而不是只打开并显示所有加密文件?
最后,当您加密一个文件时,(按照我目前的代码编写方式)您最终会得到加密的原始文件和该文件的加密版本。我确定我知道这个问题的答案,但我是否删除原始版本并保留加密版本?如果由于某种原因解密失败并且我没有文件备份怎么办?我是否也应该创建文件备份?
感谢您的帮助!我确实尝试用谷歌搜索上述问题,但似乎大多数这样做的人的水平都比我高得多,所以我没有找到很多有用的答案。
编辑:让我解释一下,虽然我正在尝试创建类似于 FolderLock 的东西,但这仅供我学习。我并不是要创建商业上可行的应用程序,只是做一些有趣的事情并同时学习。
最佳答案
如何加密文件和文件夹不是一个只有一个答案的问题。当我们谈论 Windows 环境时,您可以在大致三个不同级别加密文件:
Hard disk Encryption :在这种情况下,您加密了整个硬盘,这意味着整个磁盘都被加密了。 BitLocker就是一个例子。在这种情况下,您可以加密除主引导记录之外的所有内容。写入硬盘的每个字节都经过加密,包括操作系统。
过滤驱动程序或文件系统加密:您可以编写自己的过滤驱动程序或文件系统驱动程序,以便在文件写入磁盘时有选择地透明地加密和解密文件。大多数针对业务的加密解决方案都提供这种功能。 Microsoft 有自己的解决方案,形式为 Encrypting File System .这样做的好处是它可以更好地与操作系统集成,加密的文件和文件夹对所有其他应用程序来说就像普通文件一样。 TrueCrypt是另一个进行这种加密的程序,它是开源的,因此您可能想看一看。
应用程序级加密:您还可以在应用程序级加密文件,就像我想说的那样。如果您不编写自己的过滤器驱动程序,您将无法超越此级别。这意味着您以类似于使用 WinZip 压缩文件的方式加密文件。其他应用程序可以看到加密文件作为不同格式的文件,而不是原始格式。从本质上讲,它与使用 WinZip/WinRAR 压缩文件没有太大区别,除了您不压缩而是加密它。如果您使用 WinZip 压缩一个文件夹,它仍会被压缩成一个文件。如果您在此级别进行加密,则与加密相同。您可以为 Windows 资源管理器编写 shell 扩展,使其“看起来”像一个文件夹,但本质上它仍然是一个文件,您将无法从另一个应用程序“另存为...”到该文件夹中。例如,如果您双击该文件,您可能还需要提供用于浏览文件夹的 GUI。
我假设您要编写一个将在应用程序级别进行加密的应用程序。在这种情况下,您应该意识到我上面提到的这种方法的局限性。
关于您的问题:
您可以将文件夹加密到一个容器中,再想想 WinZip/WinRar,或者您可以将文件夹中的每个文件分别加密到它们单独的文件中。
对于密码/ key 的使用,我的建议是使用随 secret 钥来加密实际数据。然后,您使用从一个或多个密码派生的 key 在单独的 key 槽中加密此 key 。这将允许您为一个文件设置多个密码。至于算法,我推荐 AES-128,因为它是一种经过充分验证且速度非常快的算法。要使用 AES,您需要创建一个特定长度的 key 和 IV(AES-128 各 128 位)。创建这些 key 的最佳方法是使用 Rfc2898DeriveBytes使用用户输入的实际密码。不要忘记 HMAC您应该使用它来验证文件的实际解密是否正确。您可以使用 HMAC 仅验证随 secret 钥是否已正确解密,这意味着您无需对整个内容运行 HMAC。
为此,您需要编写一个 shell 扩展,但这只能让您到此为止。例如,您将无法将文件从 word 保存到加密文件夹中,因为这实际上只是加密文件的容器格式。
我建议您让用户自行创建文件备份。删除的任何文件也应该是 wiped securely ,因为简单的删除不足以从文件系统中删除文件的所有痕迹。
关于c# - 加密/解密初学者问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6629485/
我不明白为什么我会从 GHCi 得到以下回复。不是Maybe构造函数? Prelude> :t Maybe :1:1: Not in scope: data constructor `Maybe' P
场景是我在此网站上有不同的访问级别,我有一个适用于所有有效用户的简单登录流程,但是我现在尝试分隔不同的用户以实现对页面的不同访问。 这是我页面开头的代码: // CHECKS IF THE USER
我的任务是:写下数字1-100。如果该数字可以被 3 整除,则将其写入数字“它可以被 3 整除”旁边的控制台。如果数字是 5,也将其写入数字旁边的控制台“它可以被 5 整除”,如果它不能被 3 整除,
我有一堆实现协议(protocol) P 的记录 (A B C)。 我想编写一个方法,该方法将选择一种记录类型,构造它,然后调用它的方法。 例如,如果我有一个记录列表(def types '(A B
我的任务是编写一个程序,根据以下三个因素来预测您的年度燃料使用量汽车加油。我必须使用两个单独的类。这是我的第一个类,名为 AnnualFuelUse。 public class AnnualFuelU
我是 JavaScript 新手。我已经通过 Learning JavaScript (o'reilly) 完成了我的工作,但我只是想制作我的第一个 JavaScript。 我认为最好从事我感兴趣的事
我真的刚刚开始学习如何用 Python 编写代码。我有兴趣 如何重现 u[x,t] 矩阵。我尝试了 return u,它抛出了一个错误。 如果此代码中 for 循环的位置正确并正常运行。 最重要的是,
我不明白 view("") 在作为 Model 对象一部分的以下 javascript 方法中的作用: addView: function(view) { this.views
所以我正在尝试将 AppKit 导入到我的 python 项目中。我正在使用 pyCharm,但每次我尝试导入时,都会收到以下错误消息: You are using pip version 6.0.8
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 2 年前。 Improve
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
好吧,不知道在哪里问这个,但我是一个初学者程序员,使用 Perl。我需要创建一个数组数组,但我不确定使用数组/哈希引用、哈希数组或数组哈希等是否更好。 我需要一组匹配项:@totalmatches 每
我最近开始学习 PHP。我做了一个基本的网站,基本上想给它密码。如果有人能告诉我为什么这不起作用,我将不胜感激。我知道它不起作用,因为我已经尝试过了;我只是不明白为什么。 ... REST OF W
我试图理解 C 中的整个指针和取消引用。我几乎明白了,但遇到了非常简单的代码,结果我不明白: char *ptr = "Characters"; char val = *ptr; char *chrp
首先,我有这个列表(在练习中建议): Members = [('Tessa','G1'),('Evan','G2'),('Tom','G3'), ('Mia','G3'),('Claire','G3'
我有以下列表: listofanimals = ['Dog', 'Cat', 'Frog', 'Tiger', 'Sheep', 'Lion'] 我想根据字典对这个列表进行排序: score_card
1 userID = floatval($userID); 13 } else { 14 $this->userID = floatval(
我是 R 新手,遇到了一段我不理解的代码。更具体地说,我想知道 .Internal做。这是我尝试转换为 Matlab 的示例: dunif 我想知道.Internal和 做。 非常感谢您, 西蒙 最
我是一名优秀的程序员,十分优秀!