我有一个需求就是将我的一些文件夹的内容同步到网盘上面去。但是我是不信任现在的各个网盘的,网盘的数据被我认为是会被泄露的数据,我需要同步的文件夹中,可能存在隐私的数据。于是我就想到了将文件夹里面的内容进行加密,将加密之后的内容再同步到网盘上面去。如此网盘泄露的数据是加密之后的数据,没有密码的前提下,其他人难以获取到我原本的文件内容。既然有这个需求,那就开发一个简单的应用吧。本文将告诉大家我开发的加密文件夹应用
这是一个在 GitHub 上使用最友好的 MIT 协议完全开源的项目,详细请看 https://github.com/lindexi/encryption_code_book
这个加密文件夹的应用的加密核心算法,现在选用的是我之前编写的加密算法。换句话说就是加密强度肯定高不到哪里去,介意慎用
核心加密算法提供了对二进制数据的加密和解密方法,只需要给定二进制数据和密码,即可进行加密。加密输出的是密文的二进制数据,将密文加上密码即可解密出原来的二进制数据
文件夹里的文件处理方式是遍历所有文件,建立 Index 文件。在 Index 文件里面记录了各个文件的信息,文件信息包括文件名、相对路径、最后的更改时间、文件大小、文件的SHA256哈希信息、文件加密之后存储的相对路径,文件加密时加的盐
文件夹的加密需求是考虑到文件夹需要同步的需求,意味着文件夹的加密是会进行多次,每次都有一些文件变更而有一些文件没有变更。通过记录文件的最后更改时间和文件长度,可以用来快速判断文件是否发生了变更。这个方法不够准确,但是也满足了我的需求。如果判断文件是否变更的方法是通过判断文件的内容,那自然是太慢了。只通过判断修改时间和文件大小,这是非常快速的
记录下文件的相对路径,如此可以方便加密文件夹时,还原信息。再记录文件的SHA256哈希信息,可以在还原之后进行判断是否文件损坏了,看看上传到网盘再下载下来是否投毒了
原本是对每个文件使用传入的密码进行加密的,但是由于文件里面可能存在大量的有规律的数据,为了减少统计学攻击方式的影响,这里就给文件加密时带上盐。需要原密码加上盐才能组出文件的加密或解密密码,如此可以提升一点点安全性。这里的盐是一段随机数。这里的盐的概念是加密相关的黑话,还请自行了解,大概意思就是在某个数据后面加上一些干扰的信息,从而提高安全
将所有的文件信息放入到 Index 索引里面,再将索引使用加密方法进行加密之后输出到 Index.data 文件即可
如此即可了解到解密过程就是先使用密码解密 Index.data 文件,如果密码错误,自然是解密不出来 Index 的内容的。解密成功之后,可以获取到各个文件信息,然后根据文件信息从加密后的文件解密出原文件,将原文件根据相对路径放入到输出文件夹
看看界面效果
界面没啥设计的,欢迎大家来参与开发,写一个漂亮的界面
卖点:
- 自己写的加密算法,更加放心(?)
- 完全开源的项目,没有啥藏坑
-
不需要网络访问,不怕我偷偷上传密码
- 密码是 int 数组,支持中文作为密码(说的好像 byte 数组不支持中文一样)
- 支持文件夹多次加密,多次加密只记录变更文件,支持历史记录
- 基于 .NET 7 开发,但是没有用上多少 .NET 7 的新功能
特点:
- 加密本身的输入二进制数据不受限制,意味着可以叠加多个加密过程,压缩也是加密哦
- 加密之后会填补空白,填补到 1024 的倍数。这就意味着想通过文件大小猜出内容是比较凉
- 加密之后会填补空白,加密输出的文件夹的大小会比原来的文件夹大一些
下载地址: https://github.com/lindexi/encryption_code_book/releases
如下载不下来,可以发邮件向我要此软件
更多的细节那就需要请大家去看看源代码了
更多有趣的应用的开发请看 博客导航
本文会经常更新,请阅读原文: https://blog.lindexi.com/post/WPF-%E5%88%B6%E4%BD%9C%E4%B8%80%E4%B8%AA%E5%8A%A0%E5%AF%86%E6%96%87%E4%BB%B6%E5%A4%B9%E5%BA%94%E7%94%A8.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
如果你想持续阅读我的最新博客,请点击 RSS 订阅,推荐使用RSS Stalker订阅博客,或者收藏我的博客导航
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。
无盈利,不卖课,做纯粹的技术博客
以下是广告时间
推荐关注 Edi.Wang 的公众号
欢迎进入 Eleven 老师组建的 .NET 社区
以上广告全是友情推广,无盈利