java 常用方法的加密解密

 java加密解密



package com.util;

import java.math.BigInteger;
import java.security.MessageDigest;

import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**

* @author skyline
*
*/
public class DataEncryptUtil {
public static final String KEY_SHA = "SHA";
public static final String KEY_MD5 = "MD5";

/**
  * MAC算法可选以下多种算法
  * 
  * <pre>
  * HmacMD5   
  * HmacSHA1   
  * HmacSHA256   
  * HmacSHA384   
  * HmacSHA512
  * </pre>
  */
public static final String KEY_MAC = "HmacMD5";

/**
  * BASE64解密
  * 
  * @param key = 需要解密的密码字符串
  * @return
  * @throws Exception
  */
public static byte[] decryptBASE64(String key) throws Exception {
  return (new BASE64Decoder()).decodeBuffer(key);
}

/**
  * BASE64加密
  * 
  * @param key = 需要加密的字符数组
  * @return
  * @throws Exception
  */
public static String encryptBASE64(byte[] key) throws Exception {
  return (new BASE64Encoder()).encodeBuffer(key);
}

/**
  * MD5加密
  * 
  * @param data = 需要加密的字符数组
  * @return
  * @throws Exception
  */
public static byte[] encryptMD5(byte[] data) throws Exception {

  MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);
  md5.update(data);

  return md5.digest();

}

/**
  * SHA加密
  * 
  * @param data = 需要加密的字符数组
  * @return
  * @throws Exception
  */
public static byte[] encryptSHA(byte[] data) throws Exception {

  MessageDigest sha = MessageDigest.getInstance(KEY_SHA);
  sha.update(data);

  return sha.digest();

}

/**
  * 初始化HMAC密钥
  * 
  * @return
  * @throws Exception
  */
public static String initMacKey() throws Exception {
  KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);

  SecretKey secretKey = keyGenerator.generateKey();
  return encryptBASE64(secretKey.getEncoded());
}

/**
  * HMAC加密
  * 
  * @param data = 密匙加密过的字符数组
  * @param key =  需要加密的字符串
  * @return
  * @throws Exception
  */
public static byte[] encryptHMAC(byte[] data, String key) throws Exception {

  SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC);
  Mac mac = Mac.getInstance(secretKey.getAlgorithm());
  mac.init(secretKey);

  return mac.doFinal(data);

}

public static void main(String[] args) {
  String inputStr = "简单加密";
  System.err.println("原文:\n" + inputStr);

  byte[] inputData = inputStr.getBytes();
  String code;
  try {
   code = DataEncryptUtil.encryptBASE64(inputData);
   System.err.println("BASE64加密后:\n" + code);

   byte[] output = DataEncryptUtil.decryptBASE64(code);
   String outputStr = new String(output);
   System.err.println("BASE64解密后:\n" + outputStr);
   System.err.println("验证base64加密解密一致性"+inputStr.equals(outputStr));


   String key = DataEncryptUtil.initMacKey();
   System.err.println("Mac密钥:\n" + key);
   DataEncryptUtil.encryptHMAC( inputData, key);
   BigInteger mac = new
   BigInteger(DataEncryptUtil.encryptHMAC(inputData, inputStr));
   System.err.println("HMAC:\n" + mac.toString(16));

   BigInteger md5 = new
   BigInteger(DataEncryptUtil.encryptMD5(inputData));
   System.err.println("MD5:\n" + md5.toString(16));


   BigInteger sha = new
   BigInteger(DataEncryptUtil.encryptSHA(inputData));
   System.err.println("SHA:\n" + sha.toString(32));

  } catch (Exception e) {
   e.printStackTrace();
  }
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值