加密解密工具类

package com.hello.util; 


import java.io.UnsupportedEncodingException; 
import java.security.InvalidKeyException; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 
import java.security.SecureRandom; 


import javax.crypto.BadPaddingException; 
import javax.crypto.Cipher; 
import javax.crypto.IllegalBlockSizeException; 
import javax.crypto.KeyGenerator; 
import javax.crypto.NoSuchPaddingException; 
import javax.crypto.SecretKey; 
import javax.crypto.spec.SecretKeySpec; 


import org.apache.commons.codec.binary.Base64; 


/** 
 * 加密解密工具类 
 */ 
public class EncrypAlgorithm 
{ 


public static final String KEY_SHA = "SHA-1"; 
public static final String KEY_MD5 = "MD5"; 


/** 
* BASE64解密 
*  
* @param key 
* @return 
* @throws Exception 
*/ 
public static byte[] decryptBASE64(String key) throws Exception 
{ 
return Base64.decodeBase64(key); 
} 


/** 
* BASE64加密 
*  
* @param key 
* @return 
* @throws Exception 
*/ 
public static String encryptBASE64(byte[] key) throws Exception 
{ 
return Base64.encodeBase64String(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(); 
} 


/** 
* 加密 
*  
* @param content 
*            需要加密的内容 
* @param password 
*            加密密码 
* @return 
*/ 
public static byte[] encrypt(String content, String password, String character) 
{ 
try 
{ 
KeyGenerator kgen = KeyGenerator.getInstance("AES"); 
kgen.init(128, new SecureRandom(password.getBytes())); 
SecretKey secretKey = kgen.generateKey(); 
byte[] enCodeFormat = secretKey.getEncoded(); 
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); 
// 创建密码器 
Cipher cipher = Cipher.getInstance("AES"); 
byte[] byteContent = content.getBytes(character); 
// 初始化 
cipher.init(Cipher.ENCRYPT_MODE, key); 
byte[] result = cipher.doFinal(byteContent); 
// 加密 
return result; 
} 
catch (NoSuchAlgorithmException e) 
{ 
e.printStackTrace(); 
} 
catch (NoSuchPaddingException e) 
{ 
e.printStackTrace(); 
} 
catch (InvalidKeyException e) 
{ 
e.printStackTrace(); 
} 
catch (UnsupportedEncodingException e) 
{ 
e.printStackTrace(); 
} 
catch (IllegalBlockSizeException e) 
{ 
e.printStackTrace(); 
} 
catch (BadPaddingException e) 
{ 
e.printStackTrace(); 
} 
return null; 
} 


/** 
* 解密 
*  
* @param content 
*            待解密内容 
* @param password 
*            解密密钥 
* @return 
*/ 
public static byte[] decrypt(byte[] content, String password) 
{ 
try 
{ 
KeyGenerator kgen = KeyGenerator.getInstance("AES"); 
kgen.init(128, new SecureRandom(password.getBytes())); 
SecretKey secretKey = kgen.generateKey(); 
byte[] enCodeFormat = secretKey.getEncoded(); 
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); 
// 创建密码器 
Cipher cipher = Cipher.getInstance("AES"); 
// 初始化 
cipher.init(Cipher.DECRYPT_MODE, key); 
byte[] result = cipher.doFinal(content); 
// 加密 
return result; 
} 
catch (NoSuchAlgorithmException e) 
{ 
e.printStackTrace(); 
} 
catch (NoSuchPaddingException e) 
{ 
e.printStackTrace(); 
} 
catch (InvalidKeyException e) 
{ 
e.printStackTrace(); 
} 
catch (IllegalBlockSizeException e) 
{ 
e.printStackTrace(); 
} 
catch (BadPaddingException e) 
{ 
e.printStackTrace(); 
} 
return null; 
} 


/** 
* 将二进制转换成16进制 
*  
* @param buf 
* @return 
*/ 
public static String parseByte2HexStr(byte buf[]) 
{ 
StringBuffer sb = new StringBuffer(); 
for (int i = 0; i < buf.length; i++) 
{ 
String hex = Integer.toHexString(buf[i] & 0xFF); 
if (hex.length() == 1) 
{ 
hex = '0' + hex; 
} 
sb.append(hex.toUpperCase()); 
} 
return sb.toString(); 
} 


/** 
* 将16进制转换为二进制 
*  
* @param hexStr 
* @return 
*/ 
public static byte[] parseHexStr2Byte(String hexStr) 
{ 
if (hexStr.length() < 1) 
return null; 
byte[] result = new byte[hexStr.length() / 2]; 
for (int i = 0; i < hexStr.length() / 2; i++) 
{ 
int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16); 
int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16); 
result[i] = (byte) (high * 16 + low); 
} 
return result; 
} 


/** 
* @param args 
* @throws NoSuchPaddingException 
* @throws NoSuchAlgorithmException 
* @throws BadPaddingException 
* @throws IllegalBlockSizeException 
* @throws InvalidKeyException 
*/ 
public static void main(String[] args) throws Exception 
{ 
String content = "乐哥永无错"; 
String password = "BreakJoa"; 
// 加密 
System.out.println("加密前:" + content); 
byte[] encryptResult = encrypt(content, password, "utf-8"); 
System.out.println("加密后:" + encryptResult); 
// 解密 
byte[] decryptResult = decrypt(encryptResult, password); 
System.out.println("解密后:" + new String(decryptResult)); 
} 
} 

你可能感兴趣的:(java,各种加密)