zoukankan      html  css  js  c++  java
  • 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");
     }

  • 相关阅读:
    【转】extern "C"的含义和用法
    python的shelve库
    【转】TCP是流传输协议,UDP是包传输协议
    【转】TCP慢启动、拥塞避免、快速重传、快速恢复
    【转】C/C++多线程编程中什么情况下需要加volatile?
    【转】C++对象是创建在堆上,还是在栈上?
    【转】腾讯高级工程师:一道面试题引发的高并发性能调试思考
    【转】C++类的sizeof大小
    【转】C编译器内存对齐
    【转】c++中使用memset初始化类对象
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9331887.html
Copyright © 2011-2022 走看看