📄 filersa.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 + -