Java AES256加密解密工具类

package com.firebug.util;

import it.sauronsoftware.base64.Base64;  

import java.security.MessageDigest;  
import java.security.NoSuchAlgorithmException;  
import java.security.SecureRandom;  
import java.security.Security;  
 
import javax.crypto.Cipher;  
import javax.crypto.KeyGenerator;  
import javax.crypto.SecretKey;  
import javax.crypto.spec.SecretKeySpec;  
 
import org.bouncycastle.jce.provider.BouncyCastleProvider;  

public class AES256Util {

    public static byte[] encrypt(String content, String password) {  
        try {  
            //"AES":请求的密钥算法的标准名称  
            KeyGenerator kgen = KeyGenerator.getInstance("AES");  
            //256:密钥生成参数;securerandom:密钥生成器的随机源  
            SecureRandom securerandom = new SecureRandom(tohash256Deal(password));  
            kgen.init(256, securerandom);  
            //生成秘密(对称)密钥  
            SecretKey secretKey = kgen.generateKey();  
            //返回基本编码格式的密钥  
            byte[] enCodeFormat = secretKey.getEncoded();  
            //根据给定的字节数组构造一个密钥。enCodeFormat:密钥内容;"AES":与给定的密钥内容相关联的密钥算法的名称  
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");  
            //将提供程序添加到下一个可用位置  
            Security.addProvider(new BouncyCastleProvider());  
            //创建一个实现指定转换的 Cipher对象,该转换由指定的提供程序提供。  
            //"AES/ECB/PKCS7Padding":转换的名称;"BC":提供程序的名称  
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");  
 
            cipher.init(Cipher.ENCRYPT_MODE, key);  
            byte[] byteContent = content.getBytes("utf-8");  
            byte[] cryptograph = cipher.doFinal(byteContent);  
            return Base64.encode(cryptograph);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return null;  
    }  
 
    public static String decrypt(byte[] cryptograph, String password) {  
        try {  
            KeyGenerator kgen = KeyGenerator.getInstance("AES");  
            SecureRandom securerandom = new SecureRandom(tohash256Deal(password));  
            kgen.init(256, securerandom);  
            SecretKey secretKey = kgen.generateKey();  
            byte[] enCodeFormat = secretKey.getEncoded();  
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");  
            Security.addProvider(new BouncyCastleProvider());  
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");  
 
            cipher.init(Cipher.DECRYPT_MODE, key);  
            byte[] content = cipher.doFinal(Base64.decode(cryptograph));  
            return new String(content);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return null;  
    }  
 
    private 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();  
    }  
      
    private static byte[] tohash256Deal(String datastr) {  
        try {  
            MessageDigest digester=MessageDigest.getInstance("SHA-256");  
            digester.update(datastr.getBytes());  
            byte[] hex=digester.digest();  
            return hex;   
        } catch (NoSuchAlgorithmException e) {  
            throw new RuntimeException(e.getMessage());    
        }  
    }  
      
    public static void main(String[] args) {  
 
        String content = "我是待加密的文本";  
        String password = "123456";  
        System.out.println("明文:" + content);  
        System.out.println("key:" + password);  
          
        byte[] encryptResult = AES256Util.encrypt(content, password);  
        System.out.println("密文:" + AES256Util.parseByte2HexStr(encryptResult));  
          
        String decryptResult = AES256Util.decrypt(encryptResult, password);  
        System.out.println("解密:" + decryptResult);  
    }

}

//refer: https://blog.csdn.net/z69183787/article/details/78043762

//源码及其所需jar包下载:https://download.csdn.net/download/qq_37122091/10513591

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值