现在的位置: 首页 > 综合 > 正文

数据加密工具设计经验

2018年05月17日 ⁄ 综合 ⁄ 共 2359字 ⁄ 字号 评论关闭

最新源码可前往本人的 github 页面下载:

https://github.com/yang3wei/BYEncryptTool

第一个版本,有点儿搓:

第一点,“1.加密请不要勾选,解密请勾选”这个 checkBox 我老是给搞错,

结果加密变成解密,解密变成了加密,弄得我十分地蛋疼,

所以说,这是一个相当蛋疼的设计,使用起来太不友好了~

第二点,“3.待处理文件的扩展名(以逗号分隔):”

经过我的实际使用,发现这个功能不是很有用,

我一般都是习惯性的将需要加密的文件直接拖拽进来。

第三点,可圈可点的一点,

支持将文件或者文件夹拖拽到面板中,

程序将自动遍历文件夹下面的所有文件,对文件进行批量加密或解密处理~

第四点,废柴的两个固定目录:

“4.加密后文件的存放目录” 和 "5.加密文件解密后的存放目录"

考虑到我所要进行加解密的文件也要经过分类处理,

因此加解密后放置到一个固定的目录其实不是一个很好的方案。

第五点,我发现在批量加密或解密的时候,在完成整个操作的时候没有给出 finish的提示,

这个也是一个很不人性化的缺点

第六点,工具我采用了 des 的加密算法,于是我将加密文件的后缀名设置为 des

这样对加密文件的安全性是不利的,别人瞅见这个后缀,便可以推测我的加密算法有可能是采用了 des,

这对图谋不轨的人做定向突破是比较有利的,相反,如果我不采用这个后缀名,

加密算法还有 n 多种,这边会给潜在的偷窥者带来更多的阻力。

第七点,输入的密码缺乏确认机制,可能导致加密的时候键入错误的密码后,

得到的加密文件以后无法顺利地被解开。

第二个版本,依然有点儿搓:

1。将加密文件的后缀名修改了一下,由 .des 改为 .encrypted。

2。不再使用固定的文件路径,

加密文件解密后直接生成在加密文件所在的目录下,

普通文件加密后生成的加密文件也放在源文件所在的目录下面。

3。去掉了搓比的复合单选框,采用了两个支持拖拽文件操作的 JTextArea 控件,

加密就将文件拖拽到偏上的 JTextArea,解密就将文件拖拽到偏下的 JTextArea,

直观了很多,有效地减少了无操作性。

4。增加了键入密码的审核机制,唯有在两次键入的密码相同的情况下,

才能执行加密和解密操作,增强了用户在输入密码时候的自信心。

另外,还给 JPasswordField加了 Tooltip,在鼠标移动到密码框的时候,

能够看到密码的明文,这样的话,在旁边没有人的情况下,

就能以更直观的方式来查看自己输入的密码是否复合自己的意愿了。

另外,标题栏下第二行最右边的那个红色小方块儿也不是吃干饭的,

它是用于明确的提示用户两个密码框中的密码是否相同,

不相同或者两个密码框都为空的情况下,显示为红色小方块儿。

只有在两个密码框都不为空且密码相同的情况下,才显示为绿色小方块儿,

这点儿我是借鉴了 JUnit 的 红条绿条的设计。

第三版,扩充了解密操作的选择。

如果加密后的文件包含着一些敏感的个人数据,那么解密后生成为明文物理文件查看的话,

将面临敏感数据泄露的威胁(查看完毕之后一般会将解密的数据文件删除,

如果忘记将垃圾桶里面的物件彻底清除的话,便可能导致数据泄露,而且,即使是一般的清除,

对于一些比较专业的窃贼,还能通过恢复的手段来重新获取包含着敏感数据的文件)。

至此,比较好的选择便是提供一个预览机制,让用户不必在每次需要查看数据的时候,

执行解密成物理文件的操作。这样的话,仅仅是将解密后的数据放在内存里面,一旦关机之后,

便谁都别想能瞧见,同时也不用再去删除,或者担心删除了之后没有彻底清除为他人翻阅等等的问题。

同时,也保留着解密成物理文件的选择,可由用户自行选择合适的方案。

另外,预览模式下,可供支持的文件格式我仅做了较为常见的几种支持:

txt,html,pdf,png,jpg,bmp,zip等,

doc 我也想支持下,不过发现java这方面没有合适的库支持,只有不了了之~

第四版,增加了进度条的支持,

这样的话,在执行繁重任务的时候,让用户能够直观的观察任务的执行进度。

这是一个很实用的功能!

另外,还在任务执行完毕的时候加入了一个不规则窗体的文字提示,很漂亮,这里就不给上图了。

后记:

做这个小东西也花费了我不少的时间,ui的设计,功能的丰满,程序的健壮性,

并不是一天两天就能够完成的。其间也遇到了不少的问题:

1。JProgressBar 由 0% 直接变为 100% 的bug,皆是 swing 单线程的原因,

解决方案是处理繁重任务时需单开一个线程,这样进度条才有机会及时地绘制自身的变化。

2。自定义控件,透明控件等等(颜色Jpanel,透明 JTextArea,etc)

3。gridBagLayout 的使用。可以说,gridBagLayout是我所使用过的不具管理器里面最灵活的了,

其他的什么 BorderLayout,GridLayout,FlowLayout 都有种种的不灵活的弊端,

如今能够熟练的利用这一利器,让人感到相当地欣慰啊

4。程序结构的可重用性。

这个小工具我仅在架子的基础上重写了5个方法:

customizeInputControls(), upperCheck(), upperHandle(), lowerCheck(), lowerHandle()

其中 customizeInputControls() 方法用于添加数据输入控件、设置控件布局结构,

lowerCheck() 和 upperCheck() 用于做批量处理之前的检查,

比如说检查两个密码框中的密码是否相同,只有在相同的情况下才能为批量文件处理提供支持。

lowerHandle() 和 upperHandle() 用于做实际的批量文件处理操作。

换言之,这个东西很容易的就能改写成提供其他对称功能的工具,

比如说,提供 Base64 加密解密等等。。

暂时就想到这么多了,好久没熬夜感觉真累,睡觉去~

抱歉!评论已关闭.