<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    程序 人生

    程序 人生

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      11 Posts :: 2 Stories :: 18 Comments :: 0 Trackbacks
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.io.*;
    import java.security.*;
    import javax.crypto.*;
    /*
    ?* FileEncrypterT.java
    ?*
    ?* Created on 2006年6月29日, 上午11:14
    ?*/
    package key;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.io.*;
    import java.security.*;
    import javax.crypto.*;
    import javax.crypto.spec.*;
    /**
    ?*
    ?* @author? dragon love
    ?*/
    public class FileEncrypterT extends javax.swing.JFrame {
    ??? public static final int WIDTH = 550;
    ??? public static final int HEIGHT = 200;
    ???
    ??? /** This method is called from within the constructor to
    ???? * initialize the form.
    ???? * WARNING: Do NOT modify this code. The content of this method is
    ???? * always regenerated by the Form Editor.
    ???? */
    ??? // <editor-fold defaultstate="collapsed" desc=" Generated Code ">?????????????????????????
    ??? private void initComponents() {
    ???????
    ??????? setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    ??????? org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
    ??????? getContentPane().setLayout(layout);
    ??????? layout.setHorizontalGroup(
    ??????????????? layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
    ??????????????? .add(0, 400, Short.MAX_VALUE)
    ??????????????? );
    ??????? layout.setVerticalGroup(
    ??????????????? layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
    ??????????????? .add(0, 300, Short.MAX_VALUE)
    ??????????????? );
    ??????? pack();
    ??? }
    ??? // </editor-fold>???????????????????????
    ???
    ??? /**
    ???? * @param args the command line arguments
    ???? */
    ??? public static void main(String args[]) {
    ??????? FileEncrypter fe = new FileEncrypter();
    ??????? fe.show();
    ??? }
    ??? FileEncrypterT(){
    ??????? 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);
    ??????????? }
    ??????? });
    ??? }
    ???
    ??? /**
    ???? * 加密函數(shù)
    ???? * 輸入:
    ???? * 要加密的文件,密碼(由0-F組成,共48個字符,表示3個8位的密碼)如:
    ???? * AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746
    ???? * 其中:
    ???? * AD67EA2F3BE6E5AD DES密碼一
    ???? * D368DFE03120B5DF DES密碼二
    ???? * 92A8FD8FEC2F0746 DES密碼三
    ???? * 輸出:
    ???? * 對輸入的文件加密后,保存到同一文件夾下增加了".tdes"擴(kuò)展名的文件中。
    ???? */
    ??? 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();
    ??????? }
    ??? }
    ???
    ??? /**
    ???? * 解密函數(shù)
    ???? * 輸入:
    ???? * 要解密的文件,密碼(由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 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 = decryptByDES(decryptByDES(
    ??????????????????????????? decryptByDES(bytIn,bytK3),bytK2),bytK1);
    ??????????????????? File fileOut = chooser.getSelectedFile();
    ??????????????????? fileOut.createNewFile();
    ??????????????????? 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){
    ??????????? JOptionPane.showMessageDialog(
    ??????????????????? this,"解密失敗,請核對密碼!","提示",JOptionPane.OK_OPTION);
    ??????? }
    ??? }
    ???
    ??? /**
    ???? * 用DES方法加密輸入的字節(jié)
    ???? * bytKey需為8字節(jié)長,是加密的密碼
    ???? */
    ??? private byte[] encryptByDES(byte[] bytP,byte[] bytKey) throws Exception{
    ??????? DESKeySpec desKS = new DESKeySpec(bytKey);
    ??????? SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
    ??????? SecretKey sk = skf.generateSecret(desKS);
    ??????? Cipher cip = Cipher.getInstance("DES");
    ??????? cip.init(Cipher.ENCRYPT_MODE,sk);
    ??????? return cip.doFinal(bytP);
    ??? }
    ???
    ??? /**
    ???? * 用DES方法解密輸入的字節(jié)
    ???? * bytKey需為8字節(jié)長,是解密的密碼
    ???? */
    ??? private byte[] decryptByDES(byte[] bytE,byte[] bytKey) throws Exception{
    ??????? DESKeySpec desKS = new DESKeySpec(bytKey);
    ??????? SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
    ??????? SecretKey sk = skf.generateSecret(desKS);
    ??????? Cipher cip = Cipher.getInstance("DES");
    ??????? cip.init(Cipher.DECRYPT_MODE,sk);
    ??????? return cip.doFinal(bytE);
    ??? }
    ???
    ??? /**
    ???? * 輸入密碼的字符形式,返回字節(jié)數(shù)組形式。
    ???? * 如輸入字符串:AD67EA2F3BE6E5AD
    ???? * 返回字節(jié)數(shù)組:{173,103,234,47,59,230,229,173}
    ???? */
    ??? private byte[] getKeyByStr(String str){
    ??????? byte[] bRet = new byte[str.length()/2];
    ??????? for(int i=0;i<str.length()/2;i++){
    ??????????? Integer itg =
    ??????????????????? new Integer(16*getChrInt(str.charAt(2*i)) + getChrInt(str.charAt(2*i+1)));
    ??????????? bRet[i] = itg.byteValue();
    ??????? }
    ??????? return bRet;
    ??? }
    ??? /**
    ???? * 計算一個16進(jìn)制字符的10進(jìn)制值
    ???? * 輸入:0-F
    ???? */
    ??? private int getChrInt(char chr){
    ??????? int iRet=0;
    ??????? if(chr=="0".charAt(0)) iRet = 0;
    ??????? if(chr=="1".charAt(0)) iRet = 1;
    ??????? if(chr=="2".charAt(0)) iRet = 2;
    ??????? if(chr=="3".charAt(0)) iRet = 3;
    ??????? if(chr=="4".charAt(0)) iRet = 4;
    ??????? if(chr=="5".charAt(0)) iRet = 5;
    ??????? if(chr=="6".charAt(0)) iRet = 6;
    ??????? if(chr=="7".charAt(0)) iRet = 7;
    ??????? if(chr=="8".charAt(0)) iRet = 8;
    ??????? if(chr=="9".charAt(0)) iRet = 9;
    ??????? if(chr=="A".charAt(0)) iRet = 10;
    ??????? if(chr=="B".charAt(0)) iRet = 11;
    ??????? if(chr=="C".charAt(0)) iRet = 12;
    ??????? if(chr=="D".charAt(0)) iRet = 13;
    ??????? if(chr=="E".charAt(0)) iRet = 14;
    ??????? if(chr=="F".charAt(0)) iRet = 15;
    ??????? return iRet;
    ??? }
    ??? // Variables declaration - do not modify????????????????????
    ??? // End of variables declaration??????????????????
    ???
    }
    /**
    ?* 文件選擇組件。
    ?*/
    class FilePanel extends JPanel{
    ??? FilePanel(String str){
    ??????? JLabel label = new JLabel(str);
    ??????? JTextField fileText = new JTextField(35);
    ??????? JButton chooseButton = new JButton("瀏覽...");
    ??????? this.add(label);
    ??????? this.add(fileText);
    ??????? this.add(chooseButton);
    ??????? clickAction ca = new clickAction(this);
    ??????? chooseButton.addActionListener(ca);
    ???????
    ??? }
    ???
    ??? public String getFileName(){
    ??????? JTextField jtf = (JTextField)this.getComponent(1);
    ??????? return jtf.getText();
    ??? }
    ???
    ??? private class clickAction implements ActionListener{
    ??????? clickAction(Component c){
    ??????????? cmpt = c;
    ??????? }
    ???????
    ??????? public void actionPerformed(ActionEvent event){
    ??????????? JFileChooser chooser = new JFileChooser();
    ??????????? chooser.setCurrentDirectory(new File("."));
    ??????????? int ret = chooser.showOpenDialog(cmpt);
    ??????????? if(ret==JFileChooser.APPROVE_OPTION){
    ??????????????? JPanel jp = (JPanel)cmpt;
    ??????????????? JTextField jtf = (JTextField)jp.getComponent(1);
    ??????????????? jtf.setText(chooser.getSelectedFile().getPath());
    ??????????? }
    ??????? }
    ???????
    ??????? private Component cmpt;
    ??? }
    }
    /**
    ?* 密碼生成組件。
    ?*/
    class KeyPanel extends JPanel{
    ??? KeyPanel(String str){
    ??????? JLabel label = new JLabel(str);
    ??????? JTextField fileText = new JTextField(35);
    ??????? JButton chooseButton = new JButton("隨機(jī)產(chǎn)生");
    ??????? this.add(label);
    ??????? this.add(fileText);
    ??????? this.add(chooseButton);
    ??????? clickAction ca = new clickAction(this);
    ??????? chooseButton.addActionListener(ca);
    ???????
    ??? }
    ???
    //返回生成的密碼(48個字符長度)
    ??? public String getKey(){
    ??????? JTextField jtf = (JTextField)this.getComponent(1);
    ??????? return jtf.getText();
    ??? }
    ???
    ??? private class clickAction implements ActionListener{
    ??????? clickAction(Component c){
    ??????????? cmpt = c;
    ??????? }
    ???????
    ??????? public void actionPerformed(ActionEvent event){
    ??????????? try{
    ??????????????? KeyGenerator kg = KeyGenerator.getInstance("DES");
    ??????????????? kg.init(56);
    ??????????????? Key ke = kg.generateKey();
    ??????????????? byte[] bytK1 = ke.getEncoded();
    ??????????????? ke = kg.generateKey();
    ??????????????? byte[] bytK2 = ke.getEncoded();
    ??????????????? ke = kg.generateKey();
    ??????????????? byte[] bytK3 = ke.getEncoded();
    ???????????????
    ??????????????? JPanel jp = (JPanel)cmpt;
    ??????????????? JTextField jtf = (JTextField)jp.getComponent(1);
    ??????????????? jtf.setText(getByteStr(bytK1)+getByteStr(bytK2)+getByteStr(bytK3));
    ??????????? }catch(Exception e){
    ??????????????? e.printStackTrace();
    ??????????? }
    ??????? }
    ???????
    ??????? private String getByteStr(byte[] byt){
    ??????????? String strRet = "";
    ??????????? for(int i=0;i<byt.length;i++){
    //System.out.println(byt[i]);
    ??????????????? strRet += getHexValue((byt[i]&240)/16);
    ??????????????? strRet += getHexValue(byt[i]&15);
    ??????????? }
    ??????????? return strRet;
    ??????? }
    ???????
    ??????? private String getHexValue(int s){
    ??????????? String sRet=null;
    ??????????? switch (s){
    ??????????????? case 0: sRet = "0";break;
    ??????????????? case 1: sRet = "1";break;
    ??????????????? case 2: sRet = "2";break;
    ??????????????? case 3: sRet = "3";break;
    ??????????????? case 4: sRet = "4";break;
    ??????????????? case 5: sRet = "5";break;
    ??????????????? case 6: sRet = "6";break;
    ??????????????? case 7: sRet = "7";break;
    ??????????????? case 8: sRet = "8";break;
    ??????????????? case 9: sRet = "9";break;
    ??????????????? case 10: sRet = "A";break;
    ??????????????? case 11: sRet = "B";break;
    ??????????????? case 12: sRet = "C";break;
    ??????????????? case 13: sRet = "D";break;
    ??????????????? case 14: sRet = "E";break;
    ??????????????? case 15: sRet = "F";
    ??????????? }
    ??????????? return sRet;
    ??????? }
    ???????
    ??????? private Component cmpt;
    ??? }
    }




    摘自:http://dev.csdn.net/article/article/63/63304.shtm
    posted on 2006-06-29 10:19 程序-人生 閱讀(8429) 評論(6)  編輯  收藏

    Feedback

    # re: JAVA文件加密器(收藏) 2006-06-29 13:57 david.turing
    TripleDes是
    encryptByDES(encryptByDES(
    encryptByDES(bytIn,bytK1),bytK2),bytK3); 的嗎?呵呵  回復(fù)  更多評論
      

    # re: JAVA文件加密器(收藏) 2006-06-29 14:18 dudu
    請在首頁發(fā)表原創(chuàng)文章!  回復(fù)  更多評論
      

    # re: 有關(guān)JAVA文件加密與解密 2006-07-04 16:52 liaowufeng
    上面這個程序有問題,當(dāng)對大的文件加密時,GUI會出問題。請注意,事處線程中不要處理加解密操作,而應(yīng)在事件線程中啟動一個新的線程來處理。呵呵。
    可參見www.javaresearch.org中我寫的文件加解密工具。
      回復(fù)  更多評論
      

    # re: 有關(guān)JAVA文件加密與解密 2008-06-13 15:07 路過
    3M左右的東西,速度就太慢了.把我的IDE都崩了  回復(fù)  更多評論
      

    # re: 有關(guān)JAVA文件加密與解密[未登錄] 2008-12-28 12:47
    有沒運行截圖啊  回復(fù)  更多評論
      

    # re: 有關(guān)JAVA文件加密與解密[未登錄] 2012-03-15 11:51 111
    @dudu
    112222121  回復(fù)  更多評論
      


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲精品免费网站| 亚洲综合日韩中文字幕v在线| 免费无码国产在线观国内自拍中文字幕 | 国产精品嫩草影院免费| 最新亚洲人成无码网站| 亚洲一区二区三区在线观看网站| 国产精品无码免费播放| 一级毛片免费观看不卡的| 亚洲youwu永久无码精品| 亚洲日韩亚洲另类激情文学| 亚洲综合久久1区2区3区| 亚洲AV无码乱码精品国产| 免费av欧美国产在钱| 成人免费观看一区二区| 无码人妻精品一二三区免费| 成人免费午夜在线观看| 日韩欧美一区二区三区免费观看| 99久久久精品免费观看国产| 麻豆精品成人免费国产片| 久久久久久AV无码免费网站| 又大又硬又爽又粗又快的视频免费| 免费无码成人AV在线播放不卡| a级毛片在线免费观看| 久久免费公开视频| 国产精品永久免费10000| 国产精彩免费视频| 免费观看黄网站在线播放| 成人免费a级毛片无码网站入口 | 成人性生交大片免费看无遮挡| 国产特级淫片免费看| 人人狠狠综合久久亚洲88| 久久国产亚洲精品无码| 亚洲一区二区影视| 日韩色视频一区二区三区亚洲| 久久精品成人免费国产片小草| 华人在线精品免费观看| www亚洲一级视频com| 久久国产亚洲高清观看| 一级白嫩美女毛片免费| 午夜影院免费观看| 国产伦精品一区二区三区免费下载 |