zoukankan      html  css  js  c++  java
  • java实现AES加解密

    AES工具类

    
    import java.security.NoSuchAlgorithmException;
    import java.security.SecureRandom;
    import java.util.Base64;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;
    
    public class AESUtil {
    
    	private static final String KEY_ALGORITHM = "AES";
    	private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";// 默认的加密算法
    	private static final String KEY = "good!good@study#day$day%up";
    
    	/**
    	 * AES 加密操作
    	 *
    	 * @param content
    	 *            待加密内容
    	 * @param key
    	 *            加密密钥
    	 * @return 返回Base64转码后的加密数据
    	 */
    	public static String encrypt(String content) {
    		try {
    			Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);// 创建密码器
    			byte[] byteContent = content.getBytes("utf-8");
    			cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(KEY));// 初始化为加密模式的密码器
    			byte[] result = cipher.doFinal(byteContent);// 加密
    			return Base64.getEncoder().encodeToString(result);// 通过Base64转码返回
    		} catch (Exception ex) {
    			Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex);
    		}
    		return null;
    	}
    
    	/**
    	 * AES 解密操作
    	 *
    	 * @param content
    	 * @param key
    	 * @return
    	 */
    	public static String decrypt(String content) {
    		try {
    			// 实例化
    			Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
    			// 使用密钥初始化,设置为解密模式
    			cipher.init(Cipher.DECRYPT_MODE, getSecretKey(KEY));
    			// 执行操作
    			byte[] result = cipher.doFinal(Base64.getDecoder().decode(content));
    			return new String(result, "utf-8");
    		} catch (Exception ex) {
    			Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex);
    		}
    
    		return null;
    	}
    
    	/**
    	 * 生成加密秘钥
    	 *
    	 * @return
    	 * @throws NoSuchAlgorithmException
    	 */
    	private static SecretKeySpec getSecretKey(final String key) throws NoSuchAlgorithmException {
    		// 返回生成指定算法密钥生成器的 KeyGenerator 对象
    		KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
    		// AES 要求密钥长度为 128
    		kg.init(128, new SecureRandom(key.getBytes()));
    		// 生成一个密钥
    		SecretKey secretKey = kg.generateKey();
    		return new SecretKeySpec(secretKey.getEncoded(), KEY_ALGORITHM);// 转换为AES专用密钥
    	}
    
    }
    

    字节工具类

    public class BytesUtil {
    	
    	/**
    	 * 16进制表示字符
    	 */
    	public static final String hexStr = "0123456789abcdef";
    	
    	/**
    	 * 16进制的数字
    	 */
    	public static final char[] chars = hexStr.toCharArray(); 
    	
    	/**
    	 * 字节转字符串
    	 */
    	public static String byte2HexString(byte[] buff) {
    		if( buff == null ) {
    			return null;
    		}
    		int len = buff.length;
    		int j=0;
    		char[] chs = new char[len * 2];
    		for ( int i=0 ; i<len ; i++) {
    			chs[j++] =  chars[ buff[i] >> 4 & 0x0f ];
    			chs[j++] = chars[ buff[i] & 0x0f];
    		}
    		return new String(chs);
    	}
    	
    	/**
    	 * 16进制字符串转字节
    	 */
    	public static byte[] hexString2Bytes(String hexString) {
    		if( hexString == null || hexString.length() == 0) {
    			return null;
    		}
    		char[] arrs = hexString.toCharArray();
    		int len = arrs.length / 2 ;
    		byte[] buff = new byte[len];
    		int j=0;
    		for(int i=0;i<arrs.length;i+=2) {
    			byte high = (byte) hexStr.indexOf(arrs[i]);
    			byte low = (byte) hexStr.indexOf(arrs[i+1]);
    			buff[j++] = (byte) (high << 4 & 0xf0 | low) ;
    		}
    		return buff;
    	}
    	
    }
    

    如果觉得文章对您有用,请点下推荐。您的支持将鼓励我继续创作!

  • 相关阅读:
    C++指针详解
    C++中#include包含头文件带 .h 和不带 .h 的区别
    #if的使用说明
    非常简单的语音朗读功能
    C#基础笔记(第十一天)
    C#基础笔记(第十天)
    手机管理系统
    编程书籍大集合
    centos 安装多实例数据库
    Python3 网络爬虫(请求库的安装)
  • 原文地址:https://www.cnblogs.com/pengsn/p/13534501.html
Copyright © 2011-2022 走看看