IT序号网

AES加密解密 转知识解答

developer 2021年06月13日 编程语言 153 0


import java.io.UnsupportedEncodingException; 
import java.security.InvalidKeyException; 
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; 
 
public class AESUtil { 
 
	public static String AesKey="david"; 
	/** 
	 * 加密 
	 *  
	 * @param content 
	 * 需要加密的内容 
	 * @param password 
	 * 加密密码 
	 * @return 
	 */ 
	public static String encrypt(String content) { 
		try { 
			KeyGenerator kgen = KeyGenerator.getInstance("AES"); 
			kgen.init(128, new SecureRandom(AesKey.getBytes())); 
			SecretKey secretKey = kgen.generateKey(); 
			byte[] enCodeFormat = secretKey.getEncoded(); 
			SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); 
			Cipher cipher = Cipher.getInstance("AES");// 创建密码器 
			byte[] byteContent = content.getBytes("utf-8"); 
			cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化 
			byte[] result = cipher.doFinal(byteContent); 
			return parseByte2HexStr(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 String decrypt(String content) { 
		try { 
			KeyGenerator kgen = KeyGenerator.getInstance("AES"); 
			kgen.init(128, new SecureRandom(AesKey.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(parseHexStr2Byte(content)); 
			return new String(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;   
	}  	 
	 
	public static void main(String[] args) { 
		 
		String crypt=encrypt("111"); 
		System.out.println(crypt); 
		System.out.println(decrypt(crypt)); 
		 
	} 
	 
 
} 



发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

springboot 与oauth2集成知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。