JAVA_DES 加密 解密 生成随机密钥

package com.test;
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.Key;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.KeyGenerator;
class Encrypt {
 
 public static void saveDesKey() {
  try {
   SecureRandom sr = new SecureRandom();
   // 为我们选择的DES算法生成一个KeyGenerator对象
   KeyGenerator kg = KeyGenerator.getInstance("DES");
   kg.init(sr);
   // 相对路径 需要新建 conf 文件夹
   // String fileName = "conf/DesKey.xml";
   // 绝对路径
   String fileName = "d:/DesKey.xml";
   FileOutputStream fos = new FileOutputStream(fileName);
   ObjectOutputStream oos = new ObjectOutputStream(fos);
   // 生成密钥
   Key key = kg.generateKey();
   oos.writeObject(key);
   oos.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
 public static Key getKey() {
  Key kp = null;
  try {
   // 相对路径 需要新建 conf 文件夹
   // String fileName = "conf/DesKey.xml";
   // InputStream is = Encrypt.class.getClassLoader().getResourceAsStream(fileName);
   // 绝对路径
   String fileName = "d:/DesKey.xml";
   FileInputStream is = new FileInputStream(fileName);
   ObjectInputStream oos = new ObjectInputStream(is);
   kp = (Key) oos.readObject();
   oos.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
  return kp;
 }
 
 public static void encrypt(String file, String dest) throws Exception {
  Cipher cipher = Cipher.getInstance("DES");
  cipher.init(Cipher.ENCRYPT_MODE, getKey());
  InputStream is = new FileInputStream(file);
  OutputStream out = new FileOutputStream(dest);
  CipherInputStream cis = new CipherInputStream(is, cipher);
  byte[] buffer = new byte[1024];
  int r;
  while ((r = cis.read(buffer)) > 0) {
   out.write(buffer, 0, r);
  }
  cis.close();
  is.close();
  out.close();
 }
 
 public static void decrypt(String file, String dest) throws Exception {
  Cipher cipher = Cipher.getInstance("DES");
  cipher.init(Cipher.DECRYPT_MODE, getKey());
  InputStream is = new FileInputStream(file);
  OutputStream out = new FileOutputStream(dest);
  CipherOutputStream cos = new CipherOutputStream(out, cipher);
  byte[] buffer = new byte[1024];
  int r;
  while ((r = is.read(buffer)) >= 0) {
   cos.write(buffer, 0, r);
  }
  cos.close();
  out.close();
  is.close();
 }
}
public class DES {
 public static void main(String[] args) throws Exception {
  Encrypt.saveDesKey();
  System.out.println("生成key");
  Encrypt.getKey();
  System.out.println("获取key");
  Encrypt.encrypt("d:\hello.txt", "d:\encrypt.txt");
  System.out.println("加密");
  Encrypt.decrypt("d:\encrypt.txt", "d:\decrypt.txt");
  System.out.println("解密");
 }
}

  

原文地址:https://www.cnblogs.com/gisblogs/p/5082344.html