Java中创建对称密钥的代码

1 加密

public static byte[] jiami() throws Exception
 {
  //密钥生成器
  KeyGenerator key=KeyGenerator.getInstance("DESede");
  /**初始化密钥生成器
   * 该步骤一般指定密钥的长度。如果该步骤省略的话,
   * 会根据算法自动使用默认的密钥长度。指定长度时,
   * 若第一步密钥生成器使用的是“DES”算法,则密钥长度必须是56位;
   * 若是“DESede”,则可以是112或168位,其中112位有效;若是“AES”,
   * 可以是128, 192或256位;若是“Blowfish”,则可以是32至448之间可以被8整除的数;
   * “HmacMD5”和“HmacSHA1”默认的密钥长度都是64个字节
   */
  key.init(168);
  //生成密钥
  SecretKey secret=key.generateKey();
  //生成一个密钥文件 miyao.bat 以后人家需要解密 你就提供他一个文件
  FileOutputStream s=new FileOutputStream("c://miyao.bat");
  ObjectOutputStream st=new ObjectOutputStream(s);
  st.writeObject(secret);
  //工厂模式获取Cipher实例 密码器
  Cipher cp=Cipher.getInstance("DESede");
  //初始化cipher ENCRYPT_MODE表示加密DECRYPT_MODE解密  后面一个参数是密钥
  cp.init(Cipher.ENCRYPT_MODE, secret);
  //定义一个明文
  String pwd="liaomin999";
  //获取字符串的utf-8字节码
  byte[] by=pwd.getBytes("utf-8");
  //对字节码机密 miby就是加密后的字节码
  byte[] miby=cp.doFinal(by);
   //获取密文字符串
  return miby;
 }

2解密

public static String jiemi(byte[] miwen) throws Exception
 {
  //通过提供的密钥文件 获取密钥对象 进行解密
  FileInputStream s=new FileInputStream("c://miyao.bat");
  ObjectInputStream st=new ObjectInputStream(s);
  SecretKey secret=(SecretKey)st.readObject();
  //工厂模式获取Cipher实例 密码器
  Cipher cp=Cipher.getInstance("DESede");
  //初始化cipher ENCRYPT_MODE表示加密DECRYPT_MODE解密  后面一个参数是密钥
  cp.init(Cipher.DECRYPT_MODE, secret);

  //对密文字节码进行解密 如果密码写入文件可以使用文件流读写成一个数组
  byte[] miby=cp.doFinal(miwen);
   //获取密文字符串
  String minwen=new String(miby,"utf-8");
  return minwen;
 }

public static void main(String[] args) throws Exception {
  
  byte[] miwen=jiami();
  String minwen=jiemi(miwen);
  System.out.println(minwen);
 }

原文地址:https://www.cnblogs.com/liaomin416100569/p/9331890.html