zoukankan      html  css  js  c++  java
  • 数据加密工具设计经验

    最新源码可前往本人的 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 加密解密等等。。

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

  • 相关阅读:
    ETL利器Kettle实战应用解析系列三 【ETL后台进程执行配置方式】
    ETL利器Kettle实战应用解析系列二 【应用场景和实战DEMO下载】
    Kettle使用介绍
    java反射详解
    request详解
    java访问接口
    原生JS写Ajax的请求函数-原生ajax
    阿拉伯数字金额转换为大写
    深入理解Java中的String
    Strust2中,加入监听器来判断用户是否在session中存在。
  • 原文地址:https://www.cnblogs.com/java20130723/p/3212262.html
Copyright © 2011-2022 走看看