文件加密方案
来源:互联网 发布:淘宝家居用品架子 编辑:程序博客网 时间: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值到加密之后的文件末尾
加密之后的文件中保存了用户原始密钥和原始文件名,但是攻击者无法利用加密之后的信息来反推关于密钥的任何信息
- 文件加密方案
- 不可破解文件加密方案
- ET199加密方案——文件MD5校验
- EXE文件加密网络授权管理方案 - 加密EXE文件并通过服务器端授权运行管理
- 【语言-C++】文件夹或文件加密 - 方案一使用7z-zip工具压缩加密
- 各种加密方案分析
- RGSSAD加密方案分析
- 一个密码加密方案
- SQLite3数据库加密方案
- c++ 加密方案
- 视频流媒体加密方案
- 安全加密方案
- lua 代码加密方案
- 79 MD5加密方案
- 个人信息加密方案
- AES+JNI 加密方案
- 加密和签名方案
- 客户端加密方案
- 位段
- PHP BASE64解码
- 收藏链接
- 两个字符串是变位词
- 2015061403 - firebug下载地址
- 文件加密方案
- 感知机模型理解和实现
- Java中的对象和对象引用
- 硬件电路总结
- iOS开发笔记--CocoaPods详解_使用篇
- 黑马程序员-------io流总结
- C语言数组与指针
- 【翻译自mos文章】11gR2 OUI 在 PREREQUISITE CHECKS 时 hang住
- mysql_close()与mysql_free_result()的区别