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上有的皮肤包高大上了。
- 加密、解密成功后。
- 这是打开路径后的内容。
- 拖拽文件至路径框上边,也可的到文件的绝对路径
是不是很高大上呢,看起来很复杂,其实实际写起来很简单,只有亲自动手做一些东西才能有所体现。文件加密器就这样做完了,谢谢您的关注!