WindowsBuilder的DES文件加密系统实现

来源:互联网 发布:杨贵妃 山口百惠 知乎 编辑:程序博客网 时间:2024/04/30 08:44

WindowsBuilder基于DES简单文件加密系统

Maybion原创:

  • WindowsBuilder可能是每个JavaME的程序员都了解的一项简单的技术,它涵盖了一些原来的GEF+EMF编程技术所没有的条件,比如自己绘制外观的layout布局,目前,WindowsBuilder已经占领了大部分java的windows平台平面级应用开发,已经走向市场化。
  • 就目前的市场前景来看,就业形式不容乐观,国内软件行业虽然暴涨,但是日前java的就业率依然很低落,闲来无事,一年前给刘杰老师写了一个小的练手项目,当然对于编程大手来说这就算不上是项目,当然有些代买也是仿写网上的主流加密,底层并不用像C++那样自己构思算法。

主要思路

  • WindowsBuilder画框
  • 文件加密类
  • 文件拖动入框显示文件路径类
  • 随机生成密钥类

1. 安装eclipse WindowsBuilder插件

首先用eclipse搭建可视化组件,不要用老版本eclipse。具体方法请点击链接: 链接点击: [ 百度经验 ]

2.画框

GUI外观需要:

组件 组件显示名 JButton 加密 解密 JPanel JLabel 标签 JTextField 输入被加密文件位置

3.文件加密类

内容为

public class DESEncrypt {      Key key;      public DESEncrypt(String str) {        getKey(str);//生成密匙      }      /**      * 根据参数生成KEY      */      public void getKey(String strKey) {        try {            KeyGenerator generator = KeyGenerator.getInstance("DES");            generator.init(new SecureRandom(strKey.getBytes()));            this.key = generator.generateKey();            generator = null;        } catch (Exception e) {            throw new RuntimeException("Error initializing SqlMap class. Cause: " + e);        }      }      /**      * 文件file进行加密并保存目标文件destFile中      *      * @param file   要加密的文件      * @param destFile 加密后存放的文件名      */      public void encrypt(String file, String destFile) throws Exception {        Cipher cipher = Cipher.getInstance("DES");        // cipher.init(Cipher.ENCRYPT_MODE, getKey());        cipher.init(Cipher.ENCRYPT_MODE, this.key);        InputStream is = new FileInputStream(file);        OutputStream out = new FileOutputStream(destFile);        CipherInputStream cis = new CipherInputStream(is, cipher);        byte[] buffer = new byte[1024];        int r;        while ((r = cis.read(buffer)) > 0) {            out.write(buffer, 0, r);        }        cis.close();        is.close();        out.close();        JOptionPane.showMessageDialog(null, "    加密成功!", "消息提示", JOptionPane.INFORMATION_MESSAGE);      }      /**      * 文件采用DES算法解密文件      * @param file 已加密的文件      * @param destFile      * 解密后存放的文件名      */      public void decrypt(String file, String dest) throws Exception {        Cipher cipher = Cipher.getInstance("DES");        cipher.init(Cipher.DECRYPT_MODE, this.key);        InputStream is = new FileInputStream(file);        OutputStream out = new FileOutputStream(dest);        CipherOutputStream cos = new CipherOutputStream(out, cipher);        byte[] buffer = new byte[1024];        int r;        while ((r = is.read(buffer)) >= 0) {            cos.write(buffer, 0, r);        }        cos.close();        out.close();        is.close();        JOptionPane.showMessageDialog(null, "    解密成功!", "消息提示", JOptionPane.INFORMATION_MESSAGE);      }}

4.拖拽入框显示文件路径类

public class FileTransferHandler extends TransferHandler {     /**     *      */    private static final long serialVersionUID = 1L;    private JTextField textarea;     public FileTransferHandler(JTextField filePathList) {         this.textarea = filePathList;     }     public boolean importData(JComponent c,Transferable t) {          try {          List<?> files = (List<?>)t.getTransferData(DataFlavor.javaFileListFlavor);          //FileReader reader = new FileReader((File)files.get(0));          //textarea.read(reader, null);          Iterator<?> iterator = files.iterator();         while(iterator.hasNext()) {         File f = (File)iterator.next();         if (f.isFile()) {          textarea.setText(f.getAbsolutePath());         }         else {          textarea.setText("不是标准文件");         }         }          //reader.close();           return true;           } catch (UnsupportedFlavorException ufe) {           ufe.printStackTrace();           } catch (IOException e) {             e.printStackTrace();           }           return false;   }     public boolean canImport(JComponent c,D   int num = random.nextInt(62);       buf.Jappend(str.charAt(num));      }        return buf.toString();     }}false;   } }

5.生成随机密钥类

    public String RandomString(int length)     {      String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";      Random  random = new Random();      StringBuffer buf = new StringBuffer();      for(int i = 0 ;i < length ; i ++)      {       int num = ![这里写图片描述](http://img.blog.csdn.net/20150411120346045)andom.nextInt(62);       buf.append(str.charAt(num));      }        return buf.toString();     }}

6.成型图片:

  • WindowsBuilder画框,github上有的皮肤包高大上了。
    用的是quaqua的皮肤
  • 加密、解密成功后。
    这里写图片描述
  • 这是打开路径后的内容 
    这里写图片描述
  • 拖拽文件至路径框上边,也可的到文件的绝对路径
    是不是很高大上呢,看起来很复杂,其实实际写起来很简单,老师们在上学的时候都认为我的编程水平很差,只有做一些有用的东西才能有所体现。文件加密器就这样做完了,谢谢您的关注!
0 0