⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filersa.java

📁 DES的java代码,有界面,好用,是个很好的学习的例子
💻 JAVA
字号:
package RSA;
import RSA.mmsSecDilog;
import java.awt.BorderLayout;
import java.awt.ComponentOrientation;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.SecureRandom;
import javax.crypto.Cipher; 

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import com.jgoodies.forms.layout.FormLayout;


public class fileRSA extends JDialog {

    private  static fileRSA dialog = new fileRSA();
    String srcFileName;
	private String destFileName;
	private String dirName;
	private String desdirName;
	private String filerealname;
	protected  mmsSecDilog frame1;
	KeyPair kp;
	
    public static fileRSA getfileRSA()
    {
    	return dialog;
    }
	public static void main(String args[]) {
		try {
			
			dialog.addWindowListener(new WindowAdapter() {
				public void windowClosing(WindowEvent e) {
					System.exit(0);
				}
			});
			dialog.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the dialog
	 */
	public fileRSA() {
		super();
		setAlwaysOnTop(true);
		setTitle("RSA加密");
		setSize(500, 315);
		getContentPane().setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
		
		final JLabel label = new JLabel();
		label.setHorizontalAlignment(SwingConstants.CENTER);
		label.setFont(new Font("@楷体_GB2312", Font.PLAIN, 20));
		label.setLayout(new FormLayout("492px", "341px"));
		label.setBounds(new Rectangle(100, 100, 500, 375));
		label.setText("RSA加密");
		getContentPane().add(label, BorderLayout.BEFORE_FIRST_LINE);

		final JButton button_1 = new JButton();
		button_1.addMouseListener(new MouseAdapter() {
			public void mouseClicked(final MouseEvent arg0) {
				mmsSecDilog frame1=new mmsSecDilog(dialog);
	            frame1.setTitle("请选择要加密的文件");
	           	frame1.setSize(550,350);    
	           	frame1.setVisible(true);
         }
		});
		button_1.setFont(new Font("楷体_GB2312", Font.PLAIN, 18));
	    button_1.setBounds(new Rectangle(100, 100, 500, 375));
		button_1.setText("打开加密文件");
		getContentPane().add(button_1, BorderLayout.WEST);
		
		
		final JPanel Jpanel_1= new JPanel(); 
		getContentPane().add(Jpanel_1,BorderLayout.CENTER);

		final JButton button_3 = new JButton();
		button_3.addMouseListener(new MouseAdapter() {
			public void mouseClicked(final MouseEvent arg0) {
				mmsSecDilog frame1=new mmsSecDilog(dialog);
	            frame1.setTitle("请选择要解密的文件");
	           	frame1.setSize(550,350);    
	           	frame1.setVisible(true);
			}
		});
		button_3.setFont(new Font("楷体_GB2312", Font.PLAIN, 18));
		button_3.setText("打开解密文件");
		getContentPane().add(button_3, BorderLayout.EAST);

		final JButton button_4 = new JButton();
		button_4.addMouseListener(new MouseAdapter() {
			public void mouseClicked(final MouseEvent arg0) {
				System.out.println(dialog.srcFileName);
		        int pos=srcFileName.lastIndexOf("\\");
		        dirName=srcFileName.substring(0,pos);
				System.out.println(dirName);
				System.out.println(desdirName);
				filerealname = srcFileName.substring(srcFileName.lastIndexOf("\\") + 1);
				System.out.println(filerealname);
				StringBuffer dest=new StringBuffer();
                dest.append(dirName);
                dest.append("\\");
                dest.append("ENY");
                dest.append(filerealname);
                destFileName=dest.toString();
                pos=destFileName.lastIndexOf("\\");
		        desdirName=destFileName.substring(0,pos);
		        try {
		        	decryptFile(srcFileName,destFileName);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}	
		});
		button_4.setFont(new Font("楷体_GB2312", Font.PLAIN, 18));
		button_4.setText("解密");
		getContentPane().add(button_4, BorderLayout.SOUTH);
		
		
		final JButton button_5 = new JButton();
		button_5.addMouseListener(new MouseAdapter() {
			public void mouseClicked(final MouseEvent arg0) {
				
				try {

		            SecureRandom sr = new SecureRandom();
		            KeyPairGenerator kg = KeyPairGenerator.getInstance("RSA");
                    //注意密钥大小最好为1024,否则解密会有乱码情况.
                    kg.initialize(1024, sr);
                    FileOutputStream fos = new FileOutputStream("F:/Eclipse 3.3/Eclipse 3.3/workspace/DES/config/RSAKey.xml");
                    ObjectOutputStream oos = new ObjectOutputStream(fos);
		            oos.writeObject(kg.generateKeyPair());
                    oos.close();
                    } catch (Exception e) {
                    	e.printStackTrace();
                   }
             }
		});
		button_5.setFont(new Font("楷体_GB2312", Font.PLAIN, 18));
	    button_5.setBounds(new Rectangle(100, 100, 500, 375));
		button_5.setText("生成密钥文件");

		final JButton button_2 = new JButton();
		button_2.addMouseListener(new MouseAdapter() {

			public void mouseClicked(final MouseEvent arg0) {
	           	  
				System.out.println(dialog.srcFileName);
		        int pos=srcFileName.lastIndexOf("\\");
				dirName=srcFileName.substring(0,pos);
				System.out.println(dirName);
				filerealname = srcFileName.substring(srcFileName.lastIndexOf("\\") + 1);
				System.out.println(filerealname);
				StringBuffer dest=new StringBuffer();
                dest.append(dirName);
                dest.append("\\");
                dest.append("RSA");
                dest.append(filerealname);
                destFileName=dest.toString();
                System.out.println(destFileName);
                pos=destFileName.lastIndexOf("\\");
				desdirName=destFileName.substring(0,pos);
				try {
					encryptFile(srcFileName,destFileName);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
	   
			}
		});
		button_2.setFont(new Font("楷体_GB2312", Font.PLAIN, 18));
		button_2.setText("加密");
		
		Jpanel_1.add(button_5);
		Jpanel_1.add(button_2);
	}

	
	 public static KeyPair getKeyPair() throws Exception {
	        //产生新密钥对
	        KeyPair kp;
	        try {
	              String fileName = "F:/Eclipse 3.3/Eclipse 3.3/workspace/DES/config/RSAKey.xml";
	              InputStream is = new  FileInputStream(fileName);   
	              ObjectInputStream oos = new ObjectInputStream(is);
	              kp = (KeyPair) oos.readObject();
	              oos.close();
	        } catch (Exception e) {
	        	 throw new Exception("读取加密文件出错.", e);
	        }
	        return kp;

	    }


	public static void encryptFile(String srcFileName, String destFileName) throws Exception {
		 OutputStream outputWriter = null;
         InputStream inputReader = null;

       try {
             Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
             byte[] buf = new byte[100];
             int bufl;
             cipher.init(Cipher.ENCRYPT_MODE, getKeyPair().getPublic());
             outputWriter = new FileOutputStream(destFileName);
             inputReader = new FileInputStream(srcFileName);
             while ((bufl = inputReader.read(buf)) != -1) {
                 byte[] encText = null;
                 byte[] newArr = null;
                 if (buf.length == bufl) {
                     newArr = buf;
                 } else {
                     newArr = new byte[bufl];
                     for (int i = 0; i < bufl; i++) {
                    	 newArr[i]=(byte)buf[i];
                     }
                 }
                 encText = cipher.doFinal(newArr);
                 outputWriter.write(encText);
             }
             outputWriter.flush();
       } catch (Exception e) {
             throw e;
       } finally {
             try {
                 if (outputWriter != null) {
                     outputWriter.close();
                 }
         if (inputReader != null) {
                     inputReader.close();
                 }
             } catch (Exception e) {
             }
       }
   }

	
	public static void decryptFile(String srcFileName,

      String destFileName) throws Exception {
      OutputStream outputWriter = null;
      InputStream inputReader = null;
      try {
            Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
            byte[] buf = new byte[128];
            int bufl;
            cipher.init(Cipher.DECRYPT_MODE, getKeyPair().getPrivate());
            outputWriter = new FileOutputStream(destFileName);
            inputReader = new FileInputStream(srcFileName);
            while ((bufl = inputReader.read(buf)) != -1) {
                byte[] encText = null;
                byte[] newArr = null;
                if (buf.length == bufl) {
                    newArr = buf;
                } else {
                    newArr = new byte[bufl];
                    for (int i = 0; i < bufl; i++) {
                          newArr[i]=(byte)buf[i];
                    }
                }
                encText = cipher.doFinal(newArr);
                outputWriter.write(encText);
            }
                  outputWriter.flush();
      } catch (Exception e) {
            throw e;
      } finally {
            try {
                if (outputWriter != null) {
                    outputWriter.close();
                }
                if (inputReader != null) {
                    inputReader.close();
                }
            } catch (Exception e) {
            }
        }
      }


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -