文件加密方案

来源:互联网 发布:淘宝家居用品架子 编辑:程序博客网 时间:2024/06/15 23:31

加密方案

解密

用户输入密码,软件验证密码是否正确。

传统的对称加密算法,给出密文,随意给出一个密钥,使之来解密。
算法都是可以继续的,即使解密出来的信息是乱的。
如何验证用户的密码是否正确?
最差的解决方案

把用户的文件先加密,然后将用户的密码保存到文件末尾。
解密时,验证用户输入的密钥是否和文件末尾相同,如果相同则进行解密。
否则,提示密码不正确。

这样一来,所有人都能看到密钥是什么,只要他能读取文件。
不安全!!

稍好一点的解决方案

把用户的文件先加密,先利用用户输入的密钥进行文件加密,然后将用户的密码做hash,保存hash值到文件末尾。
解密时,先将用户输入做hash,将得到的hash值和文件末尾的hash值比较,相同则解密,不同则提示密码错误。

虽然其他人可以读取到hash值,但是无法获取原始密钥。

然而,现在有许多网站在收集一些常见字符串的hash值,也就是说,通过hash值可以查到某些原始字符串。比如”f447b20a7fcbf53a5d5be013ea0b15af”就是123456经过MD5摘要算法得到的结果。因此,上述方案仍有隐患。

更好的方案

把用户的文件先加密,先利用用户输入的密钥进行文件加密,然后将用户的密码做两次hash,保存两次hash值到文件末尾。
解密时,先将用户输入做两次hash,将得到的hash值和文件末尾的hash值比较,相同则解密,不同则提示密码错误。

很好的避免了上面提到的问题,然而,该方案仍然不完美。

想象对文件夹加密的应用场景,用户输入一个密钥,希望对文件夹下所有文件使用相同的密钥进行加密,这样以来,攻击者就会发现每个文件的末尾都是相同的,那么他就可以断定该文件夹下所有文件都是用同一个密钥加密的。

略带瑕疵的方案

把用户的文件先加密,先利用用户输入的密钥进行文件加密,然后将用户的密码和文件名做某种运算(拼接或异或等),之后再对结果做两次hash,保存两次hash值到文件末尾。
解密时,先将用户输入的密码和文件名做某种运算,之后再进行两次hash,将得到的hash值和文件末尾的hash值比较,相同则解密,不同则提示密码错误。

由于文件夹下每个文件的名字都是不一样的,因此每个加密后的文件末尾都是不一样的,故无法推断是否用了同一个密钥加密。
但是,该方案仍然有瑕疵,因为没有对文件名进行加密。
攻击者仍然可以看到文件名,推断出文件可能的信息。

由于解密时需要还原文件名,故文件名肯定不能使用摘要算法。
而验证密钥正确性时,只能看到加密后的文件名,而加密时是对明文文件名做的hash,这样密钥验证肯定不会通过,也就无法解密文件。

差不多可以的方案

将原始文件名附加到文件末尾,作为文件的一部分,利用用户密码进行文件内容加密
加密之后的文件名为原始文件名两次hash之后的值
将用户密码和加密之后的文件名做某种运算,之后进行一次hash,保存hash值到加密之后的文件末尾
加密之后的文件中保存了用户原始密钥和原始文件名,但是攻击者无法利用加密之后的信息来反推关于密钥的任何信息

0 0
原创粉丝点击