DES加密解密Java代码

DES加密解密Java代码
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();

}

}

}

}

相关主题
相关文档
最新文档