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

  • 相关阅读:
    RHEL7全新初始化进程管理systemd(图形启动和非图形启动切换)
    Linux系统添加硬盘设备(磁盘分区-格式化-挂载-使用)
    linux系统主要常见目录结构
    Linux系统文件访问控制列表
    Linux命令-sudo
    Linux系统文件的隐藏属性
    Linux系统文件权限&目录权限
    Linux系统VIM编辑器
    Linux功能-环境变量
    Linux系统PATH变量配置
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9331888.html
Copyright © 2020-2023  润新知