zoukankan      html  css  js  c++  java
  • DES加密解密

      1 package com.mall.common;
      2 
      3 import java.security.Key;
      4 import java.security.Security;
      5 import javax.crypto.Cipher;
      6 
      7 
      8 public class DesUtils {
      9     
     10     public static final String ALGORITHM = "DES";
     11     private static final String DEFAULT_KEY = "eCpBr.C8";  //8位
     12 
     13     
     14     public static Key getKey(String strKey) throws Exception {
     15         Security.addProvider(new com.sun.crypto.provider.SunJCE());
     16         return getKey(strKey.getBytes());
     17     }
     18     
     19     
     20     /**
     21      * 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位
     22      *
     23      * @param arrBTmp 构成该字符串的字节数组
     24      * @return 生成的密钥
     25      * @throws Exception
     26      */
     27     private static Key getKey(byte[] arrBTmp) throws Exception {
     28         // 创建一个空的8位字节数组(默认值为0)
     29         byte[] arrB = new byte[8];
     30         // 将原始字节数组转换为8位
     31         for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {
     32             arrB[i] = arrBTmp[i];
     33         }
     34         // 生成密钥
     35         Key key;
     36         key = new javax.crypto.spec.SecretKeySpec(arrB, "DES");
     37         return key;
     38     }    
     39     
     40     
     41     /**  
     42      * 根据密匙进行DES加密  
     43      *   
     44      * @param key  
     45      *            密匙  
     46      * @param info  
     47      *            要加密的信息  
     48      * @return String 加密后的信息  
     49      */  
     50     public static String encrypt(Key key, String srcString) throws Exception{   
     51         // 定义要生成的密文   
     52         byte[] cipherByte = null;   
     53         
     54         // 得到加密/解密器   
     55         Cipher c1 = Cipher.getInstance(ALGORITHM);   
     56         // 用指定的密钥和模式初始化Cipher对象   
     57         // 参数:(ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE,UNWRAP_MODE)   
     58         c1.init(Cipher.ENCRYPT_MODE, key);   
     59         // 对要加密的内容进行编码处理,   
     60         cipherByte = c1.doFinal(srcString.getBytes());   
     61         
     62         // 返回密文的十六进制形式   
     63         return byte2hex(cipherByte);   
     64     }   
     65     
     66     public static String defaultEncrypt(String srcString) throws Exception{
     67         return encrypt(getKey(DEFAULT_KEY),srcString);
     68     }
     69     
     70      
     71     /**  
     72      * 根据密匙进行DES解密  
     73      *   
     74      * @param key  
     75      *            密匙  
     76      * @param sInfo  
     77      *            要解密的密文  
     78      * @return String 返回解密后信息  
     79      */  
     80     public static String decrypt(Key key, String encryptedString) throws Exception{   
     81 
     82         byte[] cipherByte = null;   
     83         // 得到加密/解密器   
     84         Cipher c1 = Cipher.getInstance(ALGORITHM);   
     85         // 用指定的密钥和模式初始化Cipher对象   
     86         c1.init(Cipher.DECRYPT_MODE, key);   
     87         // 对要解密的内容进行编码处理   
     88         cipherByte = c1.doFinal(hex2byte(encryptedString));   
     89  
     90         // return byte2hex(cipherByte);   
     91         return new String(cipherByte);   
     92     }   
     93     
     94 
     95     public static String defaultDecrypt(String encryptedString) throws Exception{
     96         return decrypt(getKey(DEFAULT_KEY),encryptedString);
     97     }    
     98 
     99 
    100     /**  
    101      * 将二进制转化为16进制字符串  
    102      *   
    103      * @param b  
    104      *            二进制字节数组  
    105      * @return String  
    106      */  
    107     public static String byte2hex(byte[] b) { 
    108         
    109         if(null==b){
    110             return null;
    111         }
    112         
    113         StringBuffer hs = new StringBuffer("");
    114         String stmp = "";   
    115         for (int n = 0; n < b.length; n++) {   
    116             stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));   
    117             if (stmp.length() == 1) {   
    118                 hs.append("0").append(stmp);
    119             } else {   
    120                 hs.append(stmp);
    121             }   
    122         }   
    123         return hs.toString().toUpperCase();   
    124     }   
    125     /**  
    126      * 十六进制字符串转化为2进制  
    127      *   
    128      * @param hex  
    129      * @return  
    130      */  
    131     public static byte[] hex2byte(String hex) throws Exception {
    132            if (null== hex || hex.length() % 2 != 0) {
    133                System.out.println("[ERROR]DESUtil:string to hex is null or invalid length!");
    134                throw new Exception();
    135            }
    136            char[] arr = hex.toCharArray();
    137            byte[] b = new byte[hex.length() / 2];
    138            for (int i = 0, j = 0, l = hex.length(); i < l; i++, j++) {
    139                 String swap = "" + arr[i++] + arr[i];
    140                 int byteint = Integer.parseInt(swap, 16) & 0xFF;
    141                 b[j] = new Integer(byteint).byteValue();
    142            }
    143            return b;
    144     } 
    145     public static void main(String[] args) throws Exception{
    146         //F7A2744E551B356BC8C758ED4D28F5A0
    147         //加密
    148         System.out.println(DesUtils.encrypt(DesUtils.getKey(DEFAULT_KEY),"I LOVE You Chou Lan Lan"));
    149         //解密
    150         System.out.println(DesUtils.decrypt(DesUtils.getKey(DEFAULT_KEY),"5A591E309C34621AF7FFDBB429EEE0E18561D84A28B20DB6"));
    151     }
    152     
    153 }
  • 相关阅读:
    李宏毅强化学习完整笔记!开源项目《LeeDeepRL-Notes》发布
    做开源界的MATLAB,PyMiner 需要更多热爱开源的你加入
    开源翻译公告 2020.10.26:新上线了几个文档
    《线性代数》(同济版)——教科书中的耻辱柱
    Docker之四:容器之间通信
    Docker之二:linux下Docker安装
    Docker之三:Dockerfile镜像
    Docker之一:概念及命令
    idea使用之配置
    二、redis基本命令学习
  • 原文地址:https://www.cnblogs.com/lixin890808/p/3904731.html
Copyright © 2011-2022 走看看