Java版适用于PHP版3DES加密解密(PHP语言开发的MCRYPT_3DES算法、MCRYPT_MODE_ECB模式、PKCS7填充方式)

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.log4j.Logger;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
 * Java版3DES加密解密,适用于PHP版3DES加密解密(PHP语言开发的MCRYPT_3DES算法、MCRYPT_MODE_ECB模式、PKCS7填充方式)
 * @author G007N
 */
public class DesBase64Tool {
 private static SecretKey secretKey = null;//key对象
 private static Cipher cipher = null;   //私鈅加密对象Cipher
 private static String keyString = "AKlMU89D3FchIkhKyMma6FiE";//密钥
 private static Logger log = Logger.getRootLogger();
 
 static{
   try {
    secretKey = new SecretKeySpec(keyString.getBytes(), "DESede");//获得密钥
   /*获得一个私鈅加密类Cipher,DESede是算法,ECB是加密模式,PKCS5Padding是填充方式*/
    cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
  } catch (Exception e) {
   log.error(e.getMessage(), e);
  }
 }
 
 /**
  * 加密
  * @param message
  * @return
  */
    public static String desEncrypt(String message) {
     String result = "";   //DES加密字符串
     String newResult = "";//去掉换行符后的加密字符串
     try {
      cipher.init(Cipher.ENCRYPT_MODE, secretKey);     //设置工作模式为加密模式,给出密钥
      byte[] resultBytes = cipher.doFinal(message.getBytes("UTF-8")); //正式执行加密操作
      BASE64Encoder enc = new BASE64Encoder();
   result = enc.encode(resultBytes);//进行BASE64编码
   newResult = filter(result);      //去掉加密串中的换行符
  } catch (Exception e) {
   log.error(e.getMessage(), e);
  }
  return newResult;
    }
   
 /**
  * 解密
  * @param message
  * @return
  * @throws Exception
  */
    public static String desDecrypt(String message) throws Exception {
     String result = "";
     try {
            BASE64Decoder dec = new BASE64Decoder();
            byte[] messageBytes = dec.decodeBuffer(message);  //进行BASE64编码
            cipher.init(Cipher.DECRYPT_MODE, secretKey);      //设置工作模式为解密模式,给出密钥
            byte[] resultBytes = cipher.doFinal(messageBytes);//正式执行解密操作
            result = new String(resultBytes,"UTF-8");
  } catch (Exception e) {
   e.printStackTrace();
  }
  return result;
    }
 
 /**
  * 去掉加密字符串换行符
  * @param str
  * @return
  */
 public static String filter(String str) {  
  String output = "";  
  StringBuffer sb = new StringBuffer();  
  for (int i = 0; i < str.length(); i++) {  
   int asc = str.charAt(i);  
   if (asc != 10 && asc != 13) {
    sb.append(str.subSequence(i, i+1));
   }  
  }  
  output = new String(sb);  
  return output;
 }  

 /**
  * 加密解密测试
  * @param args
  */
 public static void main(String[] args) {
  try {
   String strText = "Hello world!";
   String deseResult = desEncrypt(strText);//加密   
   System.out.println("加密结果:"+deseResult);
   
   String desdResult = desDecrypt(deseResult);//解密
   System.out.println("解密结果:"+desdResult);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

阅读更多
个人分类: 加密解密
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭