菜鸟第一帖—文本加密
package com.test.zc;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.OutputStream;import java.io.Serializable;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.NoSuchAlgorithmException;import java.security.interfaces.RSAPrivateKey;import java.security.interfaces.RSAPublicKey;import java.util.Scanner;import java.util.Vector;import javax.crypto.Cipher;public class RSAEncrypt implements Serializable {/** * */private static final long serialVersionUID = -6905604215351939890L;private KeyPairGenerator keyPairGen;private KeyPair keyPair;private RSAPrivateKey privateKey;private RSAPublicKey publicKey;// 测试public static void main(String[] args) {RSAEncrypt encrypt = new RSAEncrypt();try {encrypt.readFile();} catch (FileNotFoundException e1) {encrypt.initEncrypt();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}Scanner input = new Scanner(System.in);System.out.println("加密 y/n :");if ("y".equals(input.next())) {System.out.println("加密操作");System.out.println("请输入需加密的文件路径:");File file = new File(input.next());if (file.exists()) {System.out.println("请输入加密后的输出路径:");File newFile = new File(input.next());encrypt.encryptFile(encrypt, file, newFile);}} else {System.out.println("解密操作");System.out.println("请输入需解密的文件路径:");File file = new File(input.next());if (file.exists()) {System.out.println("请输入解密后的输出路径:");File newFile = new File(input.next());try {encrypt.decryptFile(encrypt, file, newFile);} catch (Exception e) {System.out.println("不是加密文件");}}}}public void readFile() throws IOException, ClassNotFoundException {FileInputStream fis = null;fis = new FileInputStream("d:/rsa.ob");ObjectInputStream ois = new ObjectInputStream(fis);Vector vector = (Vector) ois.readObject();this.setPublicKey((RSAPublicKey) vector.get(0));this.setPrivateKey((RSAPrivateKey) vector.get(1));ois.close();fis.close();}public void initEncrypt() {// 实例类型try {this.setKeyPairGen(KeyPairGenerator.getInstance("RSA"));} catch (NoSuchAlgorithmException e2) {// TODO Auto-generated catch blocke2.printStackTrace();}// 初始化长度this.getKeyPairGen().initialize(512);// 生成KeyPairthis.setKeyPair(this.getKeyPairGen().generateKeyPair());// Generate keysthis.setPrivateKey((RSAPrivateKey) this.getKeyPair().getPrivate());this.setPublicKey((RSAPublicKey) this.getKeyPair().getPublic());FileOutputStream fos = null;ObjectOutputStream oos = null;try {fos = new FileOutputStream("d:/rsa.ob");oos = new ObjectOutputStream(fos);Vector vector = new Vector();vector.add(this.getPublicKey());vector.add(this.getPrivateKey());oos.writeObject(vector);oos.close();fos.close();} catch (IOException e) {e.printStackTrace();}}/** * 加密文件 * * @param encrypt * RSAEncrypt对象 * @param file * 源文件 * @param newFile * 目标文件 */public void encryptFile(RSAEncrypt encrypt, File file, File newFile) {try {InputStream is = new FileInputStream(file);OutputStream os = new FileOutputStream(newFile);byte[] bytes = new byte[53];while (is.read(bytes) > 0) {byte[] e = encrypt.encrypt(encrypt.getPublicKey(), bytes);bytes = new byte[53];os.write(e, 0, e.length);}os.close();is.close();System.out.println("write success");} catch (Exception e) {e.printStackTrace();}}/** * 解密文件 * * @param encrypt * RSAEncrypt对象 * @param file * 源文件 * @param newFile * 目标文件 */public void decryptFile(RSAEncrypt encrypt, File file, File newFile) {try {InputStream is = new FileInputStream(file);OutputStream os = new FileOutputStream(newFile);byte[] bytes1 = new byte[64];while (is.read(bytes1) > 0) {byte[] de = encrypt.decrypt(encrypt.getPrivateKey(), bytes1);bytes1 = new byte[64];os.write(de, 0, de.length);}os.close();is.close();System.out.println("write success");} catch (Exception e) {e.printStackTrace();}}/** * 加密实现 * * @return byte[] 加密后的字节数组 */protected byte[] encrypt(RSAPublicKey publicKey, byte[] obj) {if (publicKey != null) {try {Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, publicKey);return cipher.doFinal(obj);} catch (Exception e) {e.printStackTrace();}}return null;}/** * 解密实现 * * @return byte[] 解密后的字节数组 */protected byte[] decrypt(RSAPrivateKey privateKey, byte[] obj) {if (privateKey != null) {try {Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, privateKey);return cipher.doFinal(obj);} catch (Exception e) {e.printStackTrace();}}return null;}public KeyPair getKeyPair() {return keyPair;}public void setKeyPair(KeyPair keyPair) {this.keyPair = keyPair;}public KeyPairGenerator getKeyPairGen() {return keyPairGen;}public void setKeyPairGen(KeyPairGenerator keyPairGen) {this.keyPairGen = keyPairGen;}public RSAPrivateKey getPrivateKey() {return privateKey;}public void setPrivateKey(RSAPrivateKey privateKey) {this.privateKey = privateKey;}public RSAPublicKey getPublicKey() {return publicKey;}public void setPublicKey(RSAPublicKey publicKey) {this.publicKey = publicKey;}}
写的仓促很不规范...反正是给别人提供思路..无所谓啦 哈哈
