【发布时间】:2022-08-09 02:10:33
【问题描述】:
我正在做这个小型大学项目,我必须创建一个基于控制台的具有一些功能的文本编辑器,并且使文件受密码保护就是其中之一。正如我所说,这是一个面向 OOP 入门课程的大学项目,因此它不需要是地球上最安全的东西。我打算使用一个简单的凯撒密码来加密我的文件。
唯一的问题是密码。我将使用密码作为加密密钥,它会起作用,但问题是处理密码错误的情况。如果没有检查,那么它只会显示乱码,但我想让它在密码错误的情况下显示一条消息。
我想出的想法是以某种方式将未加密文件的哈希值存储在该文本文件中(但当我用记事本打开文件时它不应该显示该哈希值)并且在使用提供的密码解密后,我可以只需散列内容并检查它是否与存储在该文件中的隐藏散列匹配。可能吗?
顺便说一句,我使用的是 Windows,可移植性不是问题。
-
您可以使用Alternative Data Stream,这是特定于 NTFS 的功能。但要知道,如果该文件曾经被复制到非 NTFS 文件系统,ADS 将会丢失。
-
一个更简单的选择是将散列附加到加密文件内容的开头/结尾,然后在解密文件时忽略散列字节。哈希不会出现在解密的内容中,这使得无论文件如何复制都可以保留哈希。此外,对整个文件内容进行散列处理是不必要的,如果文件很大,也会很冗长。您可以简单地存储正确密码的哈希值,然后在解密期间将其与用户输入的哈希值进行比较。将错误密码散列为正确值的可能性可以忽略不计。
-
@RemyLebeau 是的,但如果我用任何其他文本编辑器打开它,我希望我的文件是干净的。哈希应该是不可见的。
-
在文本编辑器中打开加密文件无论如何都会显示垃圾,那么如果哈希作为额外垃圾存在有什么关系呢?您的要求没有意义,也没有必要。
-
编辑器的代码页是什么? ASCII,ANSI,一些单字节一,完整的Unicode?
标签: c++ encryption hash file-handling txt