• Java中创建口令密钥的代码


    加密时所用的密钥是根据给定的口令生成的。为了增加破解的难度,PBE还使用一个随机数(称为盐)和口令组合起来加密文件。此外还进行重复计算(迭代)。

    1加密

    public static void jiami(String kouling) throws Exception {
      char[] passwd = kouling.toCharArray();
      PBEKeySpec pbks = new PBEKeySpec(passwd);

    /**

    getInstance()方法的参数是一个字符串,指定口令加密算法,如PBEWithMD5AndDESPBEWithHmacSHA1AndDESede等。JCE中已经实现的是PBEWithMD5AndDES

    **/
      SecretKeyFactory kf = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
      SecretKey k = kf.generateSecret(pbks);
      byte[] salt = new byte[8];
      Random r = new Random();
      r.nextBytes(salt);
      Cipher cp = Cipher.getInstance("PBEWithMD5AndDES");
      PBEParameterSpec ps = new PBEParameterSpec(salt, 1000);
      cp.init(Cipher.ENCRYPT_MODE, k, ps);
      String mima = "liaomin999";
      byte ptext[] = mima.getBytes("UTF8");
      byte ctext[] = cp.doFinal(ptext);
      // 将盐和加密结果合并在一起保存为密文
      FileOutputStream f = new FileOutputStream("c://a.dat");
      f.write(salt);
      f.write(ctext);

     }

    2解密

    public static void jiemi(String kouling) throws Exception {
      char[] passwd=kouling.toCharArray( );
            PBEKeySpec pbks=new PBEKeySpec(passwd);
            SecretKeyFactory kf=
            SecretKeyFactory.getInstance("PBEWithMD5AndDES");
            SecretKey k=kf.generateSecret(pbks);

            byte[] salt=new byte[8];
            FileInputStream f=new FileInputStream("c://a.dat");
            f.read(salt);

            int num=f.available();
            byte[ ] ctext=new byte[num];         
            f.read(ctext);

            Cipher cp=Cipher.getInstance("PBEWithMD5AndDES");
            PBEParameterSpec ps=new PBEParameterSpec(salt,1000);
            cp.init(Cipher.DECRYPT_MODE, k,ps);
            byte ptext[]=cp.doFinal(ctext);
            // 显示解密结果
            System.out.println(new String(ptext,"utf-8"));

     }

    public static void main(String[] args) throws Exception {
      jiami("liaomin");
      jiemi("liaomin");
     }

  • 相关阅读:
    客户细分那点事_实践1
    和各种人去交流_好玩的事
    客户细分那点事_理论篇
    模型持久化
    天赋是积累出来的——转载自周鸿祎博客
    Pytorch——torch.nn.Sequential()详解
    第2章 Python序列
    Pytorch将数据打包
    线性回归的从零开始实现
    plt.scatter 各参数详解
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9331888.html
Copyright © 2020-2023  润新知