DES加密解密Java代码
//DES加密:(1)生成密钥文件(2)利用密钥,加密文件(3)根据密钥,对加密的文件解密
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
public class DES {
public static void main(String args[]) {
DemoWindow1 dw = new DemoWindow1("DES加密程序");
dw.setBounds(dw.getToolkit().getScreenSize().width / 3, dw.getToolkit()
.getScreenSize().height / 3,
dw.getToolkit().getScreenSize().width / 3, dw.getToolkit()
.getScreenSize().height / 3);
dw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
dw.setVisible(true);
}
}
class DemoWindow1 extends JFrame implements ActionListener { JTextArea jta = new JTextArea();
// 设置文本区的滚动条
int v = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
int h = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
JScrollPane jsp = new JScrollPane(jta, v, h);
// 菜单
JMenuBar menuBar = new JMenuBar();
JMenu mainMenu = new JMenu("DES加密");
JMenuItem generateItem = new JMenuItem("生成密钥");
JMenuItem encryptItem = new JMenuItem("加密信息");
JMenuItem decryptItem = new JMenuItem("解密信息");
// 构造函数
public DemoWindow1(String title) {
super(title);
// 添加菜单
mainMenu.add(generateItem);
mainMenu.addSeparator();
mainMenu.add(encryptItem);
mainMenu.add(decryptItem);
menuBar.add(mainMenu);
setJMenuBar(menuBar);
// 添加文本区
add(jsp);
// 添加事件监听
generateItem.addActionListener(this);
encryptItem.addActionListener(this);
decryptItem.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (e.getSource() == generateItem) {
// 保存密钥文件的目录路径(主要用来设置密钥的保存路径)
String fileName = null;
// 设置文件选择对话框
JFileChooser jfc = new JFileChooser();
jfc.setDialogTitle("保存密钥");
// 该文件选择对话框只能打开文件目录
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
// 如果选中,则获取选择的目录名称
if (jfc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) { fileName = jfc.getSelectedFile().getPath();
}
// 如果没有选择目录,则退出
if (fileName == null) {
return;
}
// 判断目录是否存在,如果不存在,则创建
File file = new File(fileName);
if (!file.exists())
file.mkdir();
// 创建DES密钥生成器
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
// 采用56位DES密钥
keyGen.init(56);
// 生成DES密钥
Key key = keyGen.generateKey();
System.out.println(key);
// 将密钥存储到指定目录下的“密钥.dat"文件中
ObjectOutputStream out = new ObjectOutputStream(
new FileOutputStream(fileName + "/密钥.dat"));
out.writeObject(key);
out.close();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} else if (e.getSource() == encryptItem) {
// 读取密钥文件的完整路径
String fileName = null;
// 设置文件选择对话框
JFileChooser jfc = new JFileChooser();
jfc.setDialogTitle("导入密钥文件");
// 如果选中,则获取选择文件的完整路径
if (jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { fileName = jfc.getSelectedFile().getPath();
}
// 如果没有选择文件,则退出
if (fileName == null) {
return;
}
// 读取密钥文件
ObjectInputStream in = new ObjectInputStream(
new FileInputStream(fileName));
Key key = (Key) in.readObject();
// 创建DES加密器
Cipher cipher = Cipher.getInstance("DES");
// 设置加密模式
cipher.init(Cipher.ENCRYPT_MODE, key);
// 生成密文,存放在cipherText字节数组中
byte[] cipherText = cipher.doFinal(jta.getText().getBytes(
"UTF-8"));
// 设置文件选择对话框
jfc = new JFileChooser();
jfc.setDialogTitle("保存加密文本内容");
// 如果选中,则获取选择的文件的完整路径
if (jfc.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) { fileName = jfc.getSelectedFile().getPath();
}
// 如果没有选择文件,则退出
if (fileName == null)
return;
// 将密文存储到指定文件中
FileOutputStream fos = new FileOutputStream(fileName, false);
fos.write(cipherText);
fos.close();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} else if (e.getSource() == decryptItem) {
try {
// 读取密钥文件的完整路径
String fileName = null;
// 设置文件选择对话框
JFileChooser jfc = new JFileChooser();
jfc.setDialogTitle("打开加密文本内容");
if (jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { fileName = jfc.getSelectedFile().getPath();
}
// 如果没有选择文件,就退出
if (fileName == null)
return;
// 读取密文
FileInputStream fis = new FileInputStream(fileName);
byte[] cipherText = new byte[fis.available()];
fis.read(cipherText);
fis.close();
// 设置文件选择对话框
jfc = new JFileChooser();
jfc.setDialogTitle("导入密钥文件");
if (jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { fileName = jfc.getSelectedFile().getPath();
}
// 如果没有选择文件,则退出
if (fileName == null)
return;
// 读取密钥
ObjectInputStream in = new ObjectInputStream(
new FileInputStream(fileName));
Key key = (Key) in.readObject();
// 创建DES加密器
Cipher cipher = Cipher.getInstance("DES");
// 设置解密模式
cipher.init(Cipher.DECRYPT_MODE, key);
// 生成原文,存放在cipherText字节数组中
byte[] plainText = cipher.doFinal(cipherText);
// 将原文显示在文本区中
jta.setText(new String(plainText, "UTF-8"));
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
}