• 技术文章 >Java >java教程

    Java中DES加密解密工具类的实现实例

    黄舟黄舟2017-09-28 09:23:20原创1098
    这篇文章主要介绍了Java实现的DES加密解密工具类,结合具体实例形式分析了Java实现的DES加密解密工具类定义与使用方法,需要的朋友可以参考下

    本文实例讲述了Java实现的DES加密解密工具类。分享给大家供大家参考,具体如下:

    一个工具类,很常用,不做深入研究了,那来可直接用

    DesUtil.java


    package lsy;
    import java.security.Key;
    import java.security.SecureRandom;
    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.SecretKey;
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    public class DesUtil {
     /**
      * @param args
      */
     public static void main(String[] args) {
      //以下是加密方法algorithm="AES"的测试
      System.out.println(DesUtil.getInstance("lushuaiyin").getEnCodeString("hello"));
      //输出 LDewGAZkmWHeYFjBz56ylw==
      //将上面的密文解密:
      System.out.println(DesUtil.getInstance("lushuaiyin").getDecodeString("LDewGAZkmWHeYFjBz56ylw=="));
      //输出 hello
      //改变密钥测试
      System.out.println(DesUtil.getInstance("suolong").getEnCodeString("hello"));
      //输出 /RLowOJ+Fr3KdMcdJeNatg==
      System.out.println(DesUtil.getInstance("suolong").getDecodeString("/RLowOJ+Fr3KdMcdJeNatg=="));
      //输出 hello
      //如果使用不正确的密钥解密,将会:
      System.out.println(DesUtil.getInstance("suolong").getDecodeString("LDewGAZkmWHeYFjBz56ylw=="));
     }
     private SecretKey key=null;//密钥
     //定义 加密算法,可用 DES,DESede,Blowfish,AES
     //不同的加密方式结果会不同
     private static String algorithm="AES";
     private static DesUtil desUtil=null;
     public DesUtil(){}
     public static DesUtil getInstance(String strKey){
      desUtil=new DesUtil();
      desUtil.createKey(strKey);
      return desUtil;
     }
     /**
      * algorithm 算法
      * @param strKey
      */
     public void createKey(String strKey){
      try{
       KeyGenerator kg=KeyGenerator.getInstance(DesUtil.algorithm);
       byte[] bt=strKey.getBytes("UTF-8");
       SecureRandom sr=new SecureRandom(bt);
       kg.init(sr);
       this.setKey(kg.generateKey());
      }catch(Exception e){
      }
     }
     /**
      * 加密方法,返回密文
      * cipher 密码
      * @param dataStr
      */
     public String getEnCodeString(String dataStr){
      byte[] miwen=null;//密文
      byte[] mingwen=null;//明文
      Cipher cipher;
      String result="";//密文字符串
      try{
       mingwen=dataStr.getBytes("UTF-8");
       cipher=Cipher.getInstance(DesUtil.algorithm);
       cipher.init(Cipher.ENCRYPT_MODE, this.getKey());
       miwen=cipher.doFinal(mingwen);
       BASE64Encoder base64en = new BASE64Encoder();
       result=base64en.encodeBuffer(miwen);//或者可以用下面的方法得到密文,结果是不一样的,都可以正常解密
    //   result=byte2hex(miwen);//密文结果类似2C:37:B0:18:06:64:99:61:DE:60:58:C1:CF:9E:B2:97
      }catch(Exception e){
       e.printStackTrace();
      }
      return result;
     }
     /**
      * 解密方法,返回明文
      * @param codeStr
      * @return
      */
     public String getDecodeString(String codeStr){
      BASE64Decoder base64De = new BASE64Decoder();
      byte[] miwen=null;
      byte[] mingwen=null;
      String resultData="";//返回的明文
      Cipher cipher;
      try{
       miwen=base64De.decodeBuffer(codeStr);
       cipher=Cipher.getInstance(DesUtil.algorithm);
       cipher.init(Cipher.DECRYPT_MODE, this.getKey());
       mingwen=cipher.doFinal(miwen);
       resultData = new String(mingwen,"UTF-8");
      }catch(Exception e){
       return "密钥不正确或其他原因导致异常,无法解密!";
      }
      return resultData;
     }
      //二行制转字符串
     public String byte2hex(byte[] b) {
      String hs = "";
      String stmp = "";
      for (int n = 0; n < b.length; n++) {
       stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
       if (stmp.length() == 1)
        hs = hs + "0" + stmp;
       else
        hs = hs + stmp;
       if (n < b.length - 1)
        hs = hs + ":";
      }
      return hs.toUpperCase();
     }
     public SecretKey getKey() {
      return key;
     }
     public void setKey(SecretKey key) {
      this.key = key;
     }
     public static String getAlgorithm() {
      return algorithm;
     }
     public static void setAlgorithm(String algorithm) {
      algorithm = algorithm;
     }
    }

    运行结果:


    LDewGAZkmWHeYFjBz56ylw==
    hello
    /RLowOJ+Fr3KdMcdJeNatg==
    hello
    密钥不正确或其他原因导致异常,无法解密!

    以上就是Java中DES加密解密工具类的实现实例的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Java 加密解密 实例
    上一篇:Java中关于SpringAop的详解 下一篇:Java指令重排序的问题解决
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• Java知识归纳之JVM详解• JAVA接口与抽象类详细解析• 一起聊聊Java中数组的定义和使用• Java实现多线程的四种方式• Java基础之volatile详解
    1/1

    PHP中文网