• 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);
     }

  • 相关阅读:
    JS放在head和放在body中的区别
    模板模式(Template Pattern)
    原型模式
    Linux下的头文件搜索路径
    How to Change the Default Theme Appearance [editing with no theme]
    版本控制
    What is libacl.so.1 ?
    交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别
    mount --bind 的妙用
    mount的bind选项
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9331889.html
Copyright © 2020-2023  润新知