WindowBuilder的DES文件加密系统实现

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

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

主要思路

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

1. 安装eclipse WindowBuilder插件

首先用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, DataFlavor[] flavors) {
		for (int i = 0; i < flavors.length; i++) {
			if (DataFlavor.javaFileListFlavor.equals(flavors[i])) {
				return true;
			}
		}
		return false;
	}
}

5.生成随机密钥类

public class StringRandom {
	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 = random.nextInt(62);
			buf.append(str.charAt(num));
		}
		return buf.toString();
	}
}

6.成型图片:

  • WindowsBuilder画框,github上有的皮肤包高大上了。
    用的是quaqua的皮肤
  • 加密、解密成功后。
  • 这是打开路径后的内容。
  • 拖拽文件至路径框上边,也可的到文件的绝对路径
    是不是很高大上呢,看起来很复杂,其实实际写起来很简单,只有亲自动手做一些东西才能有所体现。文件加密器就这样做完了,谢谢您的关注!
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值