栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 实现DES 加密解密的示例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 实现DES 加密解密的示例

package com.cn.peitest;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;


public class DESUtil {

 
 private static final char[] DIGITS_UPPER = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
 
 
 private static final byte[] iv = {0x12, 0x34, 0x56, 0x78, (byte) 0x90, (byte) 0xab, (byte) 0xcd, (byte) 0xef};
 
 //private static final Logger log = LoggerFactory.getLogger(DESUtil.class);
 
 private static char[] encodeHex(byte[] data, char[] toDigits) {
  int l = data.length;
  char[] out = new char[l << 1];
  for (int i = 0, j = 0; i < l; i++) {
   out[j++] = toDigits[(0xF0 & data[i]) >>> 4];
   out[j++] = toDigits[0x0F & data[i]];
  }
  return out;
 }
 
 
 
 private static String encodeHexStr(byte[] data, char[] toDigits) {
  return new String(encodeHex(data, toDigits));
 }
 
 
 private static String hexStringToString(String str) { 
 if (str == null || str.equals("")) { 
  return null; 
 } 
 str = str.replace(" ", ""); 
 byte[] baKeyword = new byte[str.length() / 2]; 
 for (int i = 0; i < baKeyword.length; i++) { 
  try { 
   baKeyword[i] = (byte) (0xff & Integer.parseInt( 
     str.substring(i * 2, i * 2 + 2), 16)); 
  } catch (Exception e) { 
   e.printStackTrace(); 
  } 
 } 
 try { 
  str = new String(baKeyword, "UTF-8"); 
  new String(); 
 } catch (Exception e1) { 
  e1.printStackTrace(); 
 } 
 return str; 
} 
 
 
 private static byte[] encrypt(byte[] arrB, String key) throws Exception { 
  return converCrypt(arrB, key, true); 
 } 
 
 
 
 public static String encrypt(String xml, String key) {
 try {
  return encodeHexStr(encrypt(xml.getBytes("UTF-8"), key), DIGITS_UPPER);
 } catch (Exception e) {
  System.out.println(e);
  return "";
 }
 
 } 
 
 
 
 private static byte[] decrypt(byte[] arrB, String key) throws Exception {
  return converCrypt(arrB, key, false); 
 }
 
 
 private static byte[] converCrypt(byte[] arrB, String key, boolean encrypt) throws Exception{
 
 String vikey = MD5.sign(key).substring(0, 8).toUpperCase();
 DESKeySpec desKeySpec = new DESKeySpec(vikey.getBytes()); 
 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); 
 SecretKey secretKey = keyFactory.generateSecret(desKeySpec); 
 IvParameterSpec ivp = new IvParameterSpec(vikey.getBytes()); 
 Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
 
 
 if (encrypt == true) {
  cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivp); 
 } else{
  
  cipher.init(Cipher.DECRYPT_MODE, secretKey, ivp); 
 }
 
 return cipher.doFinal(arrB);
 
 }
 
 
 
 public static String decrypt(String desStr, String key) {
 try{
  if (null == desStr || null == key) {
  return "";
  }
  return hexStringToString(encodeHexStr(decrypt(hexStringToByte(new String(desStr.getBytes("UTF-8"))), key), DIGITS_UPPER));
 } catch (Exception e) {
  System.out.println();
  return "";
 }
 
 }
 
 
 private static byte[] hexStringToByte(String hex) {
 int len = (hex.length() / 2);
 byte[] result = new byte[len];
 char[] achar = hex.toCharArray();
 for (int i = 0; i < len; i++) {
  int pos = i * 2;
  result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));
 }
 return result;
 }
 
 
 private static int toByte(char c) {
 byte b = (byte) "0123456789ABCDEF".indexOf(c);
 return b;
 }
 
 public DESUtil() {
 // TODO Auto-generated constructor stub
 }

 
 public static void main(String[] args) {
 // TODO Auto-generated method stub
  try {
  System.out.println("-----------------------------");
  String bStr = "123";
  String key = "SZAOA589";
  String binSing = encrypt(bStr, key);
  System.out.println("加密前:"+bStr);
  System.out.println("加密后:"+binSing);
  System.out.println("解密后:"+decrypt(binSing, key));
  System.out.println("-------------------------");
 
 } catch (Exception e) {
  // TODO Auto-generated catch bloc
  e.printStackTrace();
 }
  //3B976A2A2919A60B57DFF3518F65E1FF
  //3B976A2A2919A60B57DFF3518F65E1FF
  
  
 }

}
//================================
package com.cn.peitest;

import java.security.MessageDigest;
 
public class MD5 {
  // 生成MD5(截取16位长度)
 public static String sign(String message) {
  String md5 = "";
  try {
   MessageDigest md = MessageDigest.getInstance("MD5"); // 创建一个md5算法对象
   byte[] messageByte = message.getBytes("UTF-8");
   byte[] md5Byte = md.digest(messageByte); // 获得MD5字节数组,16*8=128位
   md5 = bytesToHex(md5Byte).substring(0, 16); // 转换为16进制字符串
  } catch (Exception e) {
   e.printStackTrace();
  }
  return md5;
 }

 // 二进制转十六进制
 public static String bytesToHex(byte[] bytes) {
  StringBuffer hexStr = new StringBuffer();
  int num;
  for (int i = 0; i < bytes.length; i++) {
   num = bytes[i];
   if (num < 0) {
    num += 256;
   }
   if (num < 16) {
    hexStr.append("0");
   }
   hexStr.append(Integer.toHexString(num));
  }
  return hexStr.toString().toUpperCase();
 }
}

以上就是java 实现DES 加密解密的示例代码的详细内容,更多关于java des加密解密的资料请关注考高分网其它相关文章!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/130130.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号