ChinaUnix首页 > 精华文章 > C/C++ > 正文

[原创] 开源一个文件加密工具FileEncryptor


http://www.chinaunix.net 作者:醉卧水云间  发表于:2008-04-17 18:06:31
发表评论】 【查看原文】 【C/C++讨论区】【关闭

[color=DarkOrange]修改一个粗心的BUG:

        //UCHAR        pad=16-flen%16; //原代码

        UCHAR pad=flen%16;  //修改后
        if(pad) pad=16-pad;   //修改后

附件已更新.[/color]


这次绝对是新鲜出炉地, 昨天刚写完, 今天就给大家开了, 当然, 属于计划内的事. 语言为c++.

加密算法都是用现成的, 我的代码只解决方便易用的问题, 这次没写跨平台的, 图快, 偷懒了:mrgreen: 

前些天做TLS/SSL解密, 了解了一点OPENSSL的东西. 有个朋友需要一个文件加密工具, 问我rar自身的加密如何, 我说不知道, 闭源的, 不一定靠的住, 不如我给你做一个吧, 于是就做了这么个东西. 不过不光是因为他的要求, 其实我自己也需要一个靠的住的加密工具, 于是只好自己动手. 一个加密工具如果是闭源的, 无论他吹的天花乱坠也没有用, 因为可能有隐藏后门的危险, 所以要安全就必须开源, 接受检验.

我这个工具是RSA+AES的, RSA 2048位, AES 256位, 量子计算机出来前应该没有谁能破解的了吧? AES用于文件流数据的加密, RSA用于保护AES的密码. 开始时想纯粹用RSA来加密, 但是RSA的解密速度慢的无法接受, 太慢了, 所以后来折中了, 用AES来加密文件内容. 如果有认为256位AES不安全的请告诉我, 我有点担心这个, RSA2048位应该没什么可担心的.


生成的文件结构很简单, 256字节RSA公钥+256字节AES密码(被公钥加密)+1字节PADDING+文件加密数据.

加密时生成一个随机的256位AES密码用于加密文件数据. 解密时用私钥和公钥配合先解开文件中的AES密码, 然后用这个密码解开文件数据.

软件用法: 

0. 在界面上晃几下鼠标, 产生一些随机事件的种子.
1. 生成一个公钥/私钥对, 会保存在当前目录下, 收好你的私钥放在安全的地方.
2. 装进公钥
3. 选择要加密的文件, 点击加密.
4. 装进私钥
5. 选择刚才生成的加密文件, 点击解密

目前私钥没有密码保护, 所以收好. 丢失私钥无法解密加过密的文件.

原码可以用VS2008打开编译, 相信大家都在用着. 编译需要准备好openssl库.

欢迎大家提意见一起完善, 本软件在sf.net上开了帐号: encryptor, 但管理员说我的介绍过于简短还没批.

[ 本帖最后由 醉卧水云间 于 2008-4-17 12:55 编辑 ]



界面



FileEncryptor.exe.rar

FileEncryptor.src.rar



 yecheng_110 回复于:2008-04-16 14:00:42

:mrgreen:


 hellioncu 回复于:2008-04-16 15:31:15

这个意义不大,因为要用的时候还得先解密。做成一般的虚拟盘方式,这样用起来方便,而且好像这样的开源项目也不少。


 醉卧水云间 回复于:2008-04-16 17:34:17

用途不一样, 加密后的东西是要存放在某个外部空间上, 比如邮件空间. 你说的那个是在自己硬盘上用的, MS自己还有加密文件夹呢, on the fly, 很方便, 功能和这个不一样. 这个可以加密文件备份到网络上, 需要时取出来用.


 tyc611 回复于:2008-04-16 18:06:32

AES256已经足够安全了
LZ应该加上更改密钥的功能(方便用户),另外,是不是自己作个小图标:mrgreen: 
还有,私钥如何保存值得研究,不然,对于用户也是一个大负担


 醉卧水云间 回复于:2008-04-16 18:28:11

这个程序我只注意是否够安全, 因为我要用他来加密机密数据, 至于功能方面够我用就行了, 我觉得还挺方便的:mrgreen: , 一个人没必要搞多个密钥, 不好管理啊, 有一个就够用了.

私钥可以加个口令保护起来. 不过我没搞那么麻烦. 自己用软件加个口令就好了.


 doctorjxd 回复于:2008-04-16 19:01:06

不错的软件。支持。

用shell脚本配合openssl、dd等命令也可以实现这个功能,呵呵。不过有些用户用起来可能不习惯。


 blankyao 回复于:2008-04-16 23:57:11

如果打算给用户用的话  就做得再简单些比较好


 westgarden 回复于:2008-04-16 23:57:55

pgp或gnupg都不错。







 evil_knight 回复于:2008-04-17 09:29:37

引用:原帖由 doctorjxd 于 2008-4-16 19:01 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8227893&ptid=1081276]
不错的软件。支持。

用shell脚本配合openssl、dd等命令也可以实现这个功能,呵呵。不过有些用户用起来可能不习惯。 



这个我感兴趣,愿闻其详!呵呵!
没想明白这两个工具如何配合来加密文件流?


 醉卧水云间 回复于:2008-04-17 10:03:51

是给自己用的, 这东西做成商业软件不赚钱, 所以我是不会再花更多时间了. 自己够用就行了.


 醉卧水云间 回复于:2008-04-17 10:06:05

openssl命令就OK了, 不需要脚本, 但是, 命令不好记. 我肯定是记不住的.


 doctorjxd 回复于:2008-04-17 11:11:26

引用:原帖由 evil_knight 于 2008-4-17 09:29 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8228771&ptid=1081276]


这个我感兴趣,愿闻其详!呵呵!
没想明白这两个工具如何配合来加密文件流? 




比如对版主的加密格式的文件进行解密

#提取RSA公钥
dd if=theencodedfile of=tmprsakey bs=256 count=1

#提取并解密AES密钥
dd if=theencodedfile bs=256 count=1 iseek=1 | openssl rsa -pubin tmprsakey > tmpaeskey

...








引用:原帖由 醉卧水云间 于 2008-4-17 10:06 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8229074&ptid=1081276]
openssl命令就OK了, 不需要脚本, 但是, 命令不好记. 我肯定是记不住的. 



是的。 不过要是像你那样定制格式的话就要用其它命令了。


 醉卧水云间 回复于:2008-04-17 11:27:32

命令行玩的真溜啊. 这些东西我睡一觉就会忘光, 从来记不住用法. ls都没用熟 :em06: 
所以我的代码一般都带图形的:lol: 再不想琢磨命令行了,水太深.


 doctorjxd 回复于:2008-04-17 18:06:31

引用:原帖由 醉卧水云间 于 2008-4-17 11:27 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8229800&ptid=1081276]
命令行玩的真溜啊. 这些东西我睡一觉就会忘光, 从来记不住用法. ls都没用熟 :em06: 
所以我的代码一般都带图形的:lol: 再不想琢磨命令行了,水太深. 



平时在FreeBSD下工作,习惯命令行了。但命令行也只有在这样类似的环境下才好用。Windows下还是楼主的程序好。




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=1081276
转载请注明作者名及原文出处