1, 通用方法
- package com.qlkj.hzd.commom.utils;
- import javax.crypto.*;
- import java.io.UnsupportedEncodingException;
- import java.security.*;
- /**
- * RSA 相关工具类
- *
- * @author vampire
- * @date 2018/10/12 下午 5:33
- */
- public class EncrypAES {
- //KeyGenerator 提供对称密钥生成器的功能, 支持各种算法
- private static KeyGenerator keygen;
- //SecretKey 负责保存对称密钥
- private static SecretKey deskey;
- //Cipher 负责完成加密或解密工作
- private static Cipher c;
- // 该字节数组负责保存加密的结果
- private static byte[] cipherByte;
- static {
- try {
- Security.addProvider(new com.sun.crypto.provider.SunJCE());
- // 实例化支持 DES 算法的密钥生成器 (算法名称命名需按规定, 否则抛出异常)
- keygen = KeyGenerator.getInstance("AES");
- // 生成密钥
- deskey = keygen.generateKey();
- // 生成 Cipher 对象, 指定其支持的 DES 算法
- c = Cipher.getInstance("AES");
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (NoSuchPaddingException e) {
- e.printStackTrace();
- }
- }
- /**
- * 对字符串加密
- *
- * @param str
- * @return
- * @throws InvalidKeyException
- * @throws IllegalBlockSizeException
- * @throws BadPaddingException
- */
- public static String Encrytor(String str) throws InvalidKeyException,
- IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
- // 根据密钥, 对 Cipher 对象进行初始化, ENCRYPT_MODE 表示加密模式
- c.init(Cipher.ENCRYPT_MODE, deskey);
- byte[] src = str.getBytes("utf-8");
- // 加密, 结果保存进 cipherByte
- cipherByte = c.doFinal(src);
- return parseByte2HexStr(cipherByte);
- }
- /**
- * 对字符串解密
- *
- * @param str
- * @return
- * @throws InvalidKeyException
- * @throws IllegalBlockSizeException
- * @throws BadPaddingException
- */
- public static String Decryptor(String str) throws InvalidKeyException,
- IllegalBlockSizeException, BadPaddingException {
- // 根据密钥, 对 Cipher 对象进行初始化, DECRYPT_MODE 表示加密模式
- c.init(Cipher.DECRYPT_MODE, deskey);
- cipherByte = c.doFinal(parseHexStr2Byte(str));
- return new String(cipherByte);
- }
- /**
- * 将 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;
- }
- /**
- * 将二进制转换成 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();
- }
- }
2, 添加密码加解密
- 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;
- }
来源: http://www.bubuko.com/infodetail-2805783.html