RSA加密文件 package trans; import java.io.File; 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.PrivateKey; import java.security.PublicKey; import java.security.SecureRandom; import javax.crypto.Cipher; /** * For RSA * @author easykoo */ public class RSAUtil { /** * For test * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { CreateRSAKey(); encryptFile("dfd.txt", "encrypt.txt", null); decryptFile("encrypt.txt", "decrypt.txt", null); } /** * 生成密钥 */ public static void CreateRSAKey() { try { SecureRandom sr = new SecureRandom(); KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(1024, sr); KeyPair keyPair = kpg.genKeyPair(); PublicKey pubkey = keyPair.getPublic(); PrivateKey prikey = keyPair.getPrivate(); ObjectOutputStream out = new ObjectOutputStream( new java.io.FileOutputStream("c://encrypt_private.key")); out.writeObject(prikey); out.close(); out = new java.io.ObjectOutputStream(new java.io.FileOutputStream( "c://decrypt_public.key")); out.writeObject(pubkey); out.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 从文件中读取公钥 * @param file * @return pubKey */ public static PublicKey getPubKey(File file) { PublicKey pubKey = null; InputStream is = null; try { if (file == null) { is = new FileInputStream("c://decrypt_public.key"); } else { is = new FileInputStream(file); } ObjectInputStream oos = new ObjectInputStream(is); pubKey = (PublicKey) oos.readObject(); oos.close(); } catch (Exception e) { e.printStackTrace(); } return pubKey; } /** * 从文件中读取私钥 * @param file * @return priKey */ public static PrivateKey getPriKey(File file) { InputStream is = null; PrivateKey priKey = null; try { if (file == null) { is = new FileInputStream("c://encrypt_private.key"); } else { is = new FileInputStream(file); } ObjectInputStream oos = new ObjectInputStream(is); priKey = (PrivateKey) oos.readObject(); oos.close(); } catch (Exception e) { e.printStackTrace(); } return priKey; } /** * 加密文件 * @param srcFileName 原文件名 * @param tarFileName 目标文件名 * @param pubKeyFile 公钥文件 * @throws Exception */ public static void encryptFile(String srcFileName, String tarFileName, File pubKeyFile) throws Exception { OutputStream outputWriter = null; InputStream inputReader = null; try { Cipher cipher = Cipher.getInstance("RSA"); byte[] buf = new byte[100]; int bufl; cipher.init(Cipher.ENCRYPT_MODE, getPubKey(pubKeyFile)); outputWriter = new FileOutputStream(tarFileName); 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] = 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) { e.printStackTrace(); } } } /** * 解密文件 * @param srcFileName 原文件名 * @param tarFileName 目标文件名 * @param priKeyFile 私钥文件 * @throws Exception */ public static void decryptFile(String srcFileName, String tarFileName, File priKeyFile) throws Exception { OutputStream outputWriter = null; InputStream inputReader = null; try { Cipher cipher = Cipher.getInstance("RSA"); byte[] buf = new byte[128]; int bufl; cipher.init(Cipher.DECRYPT_MODE, getPriKey(priKeyFile)); outputWriter = new FileOutputStream(tarFileName); 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] = 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) { e.printStackTrace(); } } } } 2010-04-06