DES加密解密Java代码.docx
《DES加密解密Java代码.docx》由会员分享,可在线阅读,更多相关《DES加密解密Java代码.docx(6页珍藏版)》请在冰点文库上搜索。
//DES加密:
(1)生成密钥文件
(2)利用密钥,加密文件(3)根据密钥,对加密的文件解密
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.ObjectInputStream;
importjava.io.ObjectOutputStream;
importjava.security.Key;
importjavax.crypto.Cipher;
importjavax.crypto.KeyGenerator;
importjavax.swing.JFileChooser;
importjavax.swing.JFrame;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
importjavax.swing.JScrollPane;
importjavax.swing.JTextArea;
importjavax.swing.ScrollPaneConstants;
publicclassDES{
publicstaticvoidmain(Stringargs[]){
DemoWindow1dw=newDemoWindow1("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);
}
}
classDemoWindow1extendsJFrameimplementsActionListener{
JTextAreajta=newJTextArea();
//设置文本区的滚动条
intv=ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
inth=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
JScrollPanejsp=newJScrollPane(jta,v,h);
//菜单
JMenuBarmenuBar=newJMenuBar();
JMenumainMenu=newJMenu("DES加密");
JMenuItemgenerateItem=newJMenuItem("生成密钥");
JMenuItemencryptItem=newJMenuItem("加密信息");
JMenuItemdecryptItem=newJMenuItem("解密信息");
//构造函数
publicDemoWindow1(Stringtitle){
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);
}
publicvoidactionPerformed(ActionEvente){
//TODOAuto-generatedmethodstub
if(e.getSource()==generateItem){
try{
//保存密钥文件的目录路径(主要用来设置密钥的保存路径)
StringfileName=null;
//设置文件选择对话框
JFileChooserjfc=newJFileChooser();
jfc.setDialogTitle("保存密钥");
//该文件选择对话框只能打开文件目录
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//如果选中,则获取选择的目录名称
if(jfc.showSaveDialog(this)==JFileChooser.APPROVE_OPTION){
fileName=jfc.getSelectedFile().getPath();
}
//如果没有选择目录,则退出
if(fileName==null){
return;
}
//判断目录是否存在,如果不存在,则创建
Filefile=newFile(fileName);
if(!
file.exists())
file.mkdir();
//创建DES密钥生成器
KeyGeneratorkeyGen=KeyGenerator.getInstance("DES");
//采用56位DES密钥
keyGen.init(56);
//生成DES密钥
Keykey=keyGen.generateKey();
System.out.println(key);
//将密钥存储到指定目录下的“密钥.dat"文件中
ObjectOutputStreamout=newObjectOutputStream(
newFileOutputStream(fileName+"/密钥.dat"));
out.writeObject(key);
out.close();
}catch(Exceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();
}
}elseif(e.getSource()==encryptItem){
try{
//读取密钥文件的完整路径
StringfileName=null;
//设置文件选择对话框
JFileChooserjfc=newJFileChooser();
jfc.setDialogTitle("导入密钥文件");
//如果选中,则获取选择文件的完整路径
if(jfc.showOpenDialog(this)==JFileChooser.APPROVE_OPTION){
fileName=jfc.getSelectedFile().getPath();
}
//如果没有选择文件,则退出
if(fileName==null){
return;
}
//读取密钥文件
ObjectInputStreamin=newObjectInputStream(
newFileInputStream(fileName));
Keykey=(Key)in.readObject();
//创建DES加密器
Ciphercipher=Cipher.getInstance("DES");
//设置加密模式
cipher.init(Cipher.ENCRYPT_MODE,key);
//生成密文,存放在cipherText字节数组中
byte[]cipherText=cipher.doFinal(jta.getText().getBytes(
"UTF-8"));
//设置文件选择对话框
jfc=newJFileChooser();
jfc.setDialogTitle("保存加密文本内容");
//如果选中,则获取选择的文件的完整路径
if(jfc.showSaveDialog(this)==JFileChooser.APPROVE_OPTION){
fileName=jfc.getSelectedFile().getPath();
}
//如果没有选择文件,则退出
if(fileName==null)
return;
//将密文存储到指定文件中
FileOutputStreamfos=newFileOutputStream(fileName,false);
fos.write(cipherText);
fos.close();
}catch(Exceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();
}
}elseif(e.getSource()==decryptItem){
try{
//读取密钥文件的完整路径
StringfileName=null;
//设置文件选择对话框
JFileChooserjfc=newJFileChooser();
jfc.setDialogTitle("打开加密文本内容");
if(jfc.showOpenDialog(this)==JFileChooser.APPROVE_OPTION){
fileName=jfc.getSelectedFile().getPath();
}
//如果没有选择文件,就退出
if(fileName==null)
return;
//读取密文
FileInputStreamfis=newFileInputStream(fileName);
byte[]cipherText=newbyte[fis.available()];
fis.read(cipherText);
fis.close();
//设置文件选择对话框
jfc=newJFileChooser();
jfc.setDialogTitle("导入密钥文件");
if(jfc.showOpenDialog(this)==JFileChooser.APPROVE_OPTION){
fileName=jfc.getSelectedFile().getPath();
}
//如果没有选择文件,则退出
if(fileName==null)
return;
//读取密钥
ObjectInputStreamin=newObjectInputStream(
newFileInputStream(fileName));
Keykey=(Key)in.readObject();
//创建DES加密器
Ciphercipher=Cipher.getInstance("DES");
//设置解密模式
cipher.init(Cipher.DECRYPT_MODE,key);
//生成原文,存放在cipherText字节数组中
byte[]plainText=cipher.doFinal(cipherText);
//将原文显示在文本区中
jta.setText(newString(plainText,"UTF-8"));
}catch(Exceptione1){
e1.printStackTrace();
}
}
}
}