当前位置:编程学习 > JAVA >>

Java awt操作文件对称加密

Java代码 
package cn.rg.test; 
 
import java.awt.*; 
 
import java.awt.event.*; 
  
import javax.swing.*; 
  
import java.io.*; 
  
import java.security.*;  
 
 
import javax.crypto.*; 
  
import javax.crypto.spec.*; 
 
 
  
/** 
文件名:FileEncrypter.java 
JDK:1.40以上 
 
 
   *说明:文件加密 
加密方法:三重DES加密 
 
 
   *加密过程:
对选中的文件加密后在同文件夹下生成一个
 
   *增加了".tdes" 扩展名的加密文件
 
   *解密过程:对选中的加密文件(必须有".tdes"扩展名)进行解密 
 
   */ 
 
 
 public class FileEncrypter extends JFrame{ 
 public static final int WIDTH = 550; 
 public static final int HEIGHT = 200; 
 public static void main(String args[]) { 
   FileEncrypter fe = new FileEncrypter(); fe.show(); 
 }                        
 
     
 
FileEncrypter(){  
  this.setSize(WIDTH,HEIGHT);  
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  this.setResizable(false);  
  Toolkit tk = Toolkit.getDefaultToolkit();  
  Dimension screenSize = tk.getScreenSize();  
  this.setLocation((screenSize.width - WIDTH)/2, (screenSize.height - HEIGHT)/2);  
  this.setTitle("文件加密器(TriDES)");  
  Container c = this.getContentPane();  
  c.setLayout( new FlowLayout());  
  final FilePanel fp = new FilePanel("文件选择");  
  c.add(fp);  
  final KeyPanel pp = new KeyPanel("密码");  
  c.add(pp);  
  JButton jbE = new JButton("加密");  
  c.add(jbE);  
  jbE.addActionListener(new ActionListener(){  
  public void actionPerformed(ActionEvent event){  
  File file = new File(fp.getFileName());  
  if (file.exists())  
    encrypt(file.getAbsoluteFile(),pp.getKey());  
  else  
    JOptionPane.showMessageDialog(  
  null,"请选择文件!","提示",JOptionPane.OK_OPTION);  
 }  
 });  
  JButton jbD = new JButton("解密");  
  c.add(jbD);  
  jbD.addActionListener(new ActionListener(){  
    public void actionPerformed(ActionEvent event){  
     File file = new File(fp.getFileName());  
     if (file.exists())  
      decrypt(file.getAbsoluteFile(),pp.getKey());  
     else  
      JOptionPane.showMessageDialog(null,"请选择文件!","提示",JOptionPane.OK_OPTION);  
   }  
  });  
 }  
/** 
加密函数 
输入: 
要加密的文件,密码(由0-F组成,共48个字符,表示3个8位的密码)如: 
AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746 
其中: 
AD67EA2F3BE6E5AD DES密码一 
D368DFE03120B5DF DES密码二 
92A8FD8FEC2F0746 DES密码三 
输出: 
对输入的文件加密后,保存到同一文件夹下增加了".tdes"扩展名的文件中。 
*/  
private void encrypt(File fileIn,String sKey){  
  try{  
   if(sKey.length() == 48){  
     byte[] bytK1 = getKeyByStr(sKey.substring(0,16));  
     byte[] bytK2 = getKeyByStr(sKey.substring(16,32));  
     byte[] bytK3 = getKeyByStr(sKey.substring(32,48));  
     FileInputStream fis = new FileInputStream(fileIn);  
     byte[] bytIn = new byte[(int)fileIn.length()];  
     for(int i = 0;i< fileIn.length();i++){  
      bytIn[i] = (byte)fis.read();  
     }  
    //加密  
    byte[] bytOut = encryptByDES(encryptByDES(encryptByDES(bytIn,bytK1),bytK2),bytK3);  
    String fileOut = fileIn.getPath() + ".tdes";  
    FileOutputStream fos = new FileOutputStream(fileOut);  
    for(int i = 0;i< bytOut.length;i++){  
      fos.write((int)bytOut[i]);  
    }  
    fos.close();  
    JOptionPane.showMessageDialog(this,"加密成功!","提示",JOptionPane.OK_OPTION);  
  }else  
    JOptionPane.showMessageDialog(  
    this,"密码长度必须等于48!","错误信息",JOptionPane.ERROR_MESSAGE);  
  }catch(Exception e){  
         e.printStackTrace();  
   }  
 }  
/** 
解密函数 
输入: 
要解密的文件,密码(由0-F组成,共48个字符,表示3个8位的密码)如: 
AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746 
其中: 
AD67EA2F3BE6E5AD DES密码一 
D368DFE03120B5DF DES密码二 
92A8FD8FEC2F0746 DES密码三 
输出: 
对输入的文件解密后,保存到用户指定的文件中。 
*/  
private void decrypt(File fileIn,String sKey){  
  try{  
    if(sKey.length() == 48){  
      String strPath = fileIn.getPath();  
      if(strPath.substring(strPath.length()-5).toLowerCase().equals(".tdes"))  
        strPath = strPath.substring(0,strPath.length()-5);  
      else{  
        JOptionPane.showMessageDialog(this,"不是合法的加密文件!","提示",JOptionPane.OK_OPTION);  
        return;  
      }  
      JFileChooser chooser = new JFileChooser();  
      chooser.setCurrentDirectory(new File("."));  
      chooser.setSelectedFile(new File(strPath));  
      //用户指定要保存的文件  
      int ret = chooser.showSaveDialog(this);  
      if(ret==JFileChooser.APPROVE_OPTION){  
        byte[] bytK1 = getKeyByStr(sKey.substring(0,16));  
        byte[] bytK2 = getKeyByStr(sKey.substring(16,32));  
        byte[] bytK3 = getKeyByStr(sKey.substring(32,48));  
   
        FileInputStream f
补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,