登录 |  注册
首页 >  服务器/安全 >  加解密大全 >  AES加解密-JAVA代码

AES加解密-JAVA代码

【Java】AES加机解密工具类代码

import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public final class AES {
   //加密
    public static String encrypt(String content, String key) throws Exception {
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(generateKey(key).getEncoded(), "AES"));
        byte[] b = cipher.doFinal(content.getBytes("UTF-8"));
        if (b == null || b.length == 0) {
            return "";
        }
        StringBuffer buf = new StringBuffer();
        for (int i = 0; i < b.length; i++) {
            String hex = Integer.toHexString(b[i] & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            buf.append(hex.toUpperCase());
        }
        return buf.toString();
    }
    //解密
    public static String decrypt(String content, String key) throws Exception {
        if (content == null || content.length() == 0) {
            return null;
        }
        byte[] b = new byte[content.length() / 2];
        for (int i = 0; i < content.length() / 2; i++) {
            int high = Integer.parseInt(content.substring(i * 2, i * 2 + 1), 16);
            int low = Integer.parseInt(content.substring(i * 2 + 1, i * 2 + 2), 16);
            b[i] = (byte) (high * 16 + low);
        }
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(generateKey(key).getEncoded(), "AES"));
        return new String(cipher.doFinal(b));
    }
    private static SecretKey generateKey(String key) throws NoSuchAlgorithmException {
        SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
        KeyGenerator kg = KeyGenerator.getInstance("AES");
        secureRandom.setSeed(key.getBytes());
        kg.init(128, secureRandom);
        return kg.generateKey();
    }
   //测试
    public static void main(String[] args) {
        try {
            String str = "AES测试";
            String secretKey = "秘钥";
            System.out.println("秘钥:" + secretKey);
            System.out.println("明文:" + str);
            String str0 = encrypt(str, secretKey);
            System.out.println("密文:" + str0);
            System.out.println("解密:" + decrypt(str0, secretKey));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
推荐文章
  • Java内存模型(JavaMemoryModel,JMM)是Java语言规范的一部分,它定义了Java虚拟机(JVM)如何管理和协调各个线程之间的共享数据访问行为,旨在解决由于多线程环境下的数据可见性、原子性和有序性问题。理解和掌握JMM是编写高效、正确并发程序的关键。一、Java内存模型概述JMM
  • 为什么要设置静态IP在安装好CentOS虚拟机以后,一般我们会通过Xshell连接到虚拟机,而不是直接使用虚拟机里面的终端(Terminal)输入命令。如果使用默认的动态分配IP,虚拟机每次开机以后IP都会改变,Xshell连接需要修改IP。所以我们需要将IP设置成静态IP,只要虚拟机开机即可连接。
  • 使用centos的wget提示:commondnotfound是因为没有安装wget这个指令安装wgetyum -y install wget
  • 一、因为Centos官网是挂在国外的服务器上,下载镜像时相比于国内的下载速度会慢很多,所以在这里向大家分享两个国内的镜像站去下载Centos镜像。二、前往阿里云镜像站下载Centos7镜像1、阿里云官网地址:https://www.aliyun.com/ 2、点击左上角的【文档与社区】展开选择【镜像
  • 现在不管安防工程还是弱电工程,与网络的联系也越来越密切了,网络基础知识中的网络命令ping命令在项目中是使用频率最高的,一般我们用的都是它的基本功能,今天和大家来详细看下Ping命令的7个基础用法,掌握了秒变大神!1、ping命令基础2、ping-t的使用3、ping-a的使用4、ping-n的使用
  • 总结下工作中遇到的GC问题。一、JVM参数设置不当机器4G,部分JVM参数设置-Xmx3296m -Xms3296m -Xss256k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:MaxGCPauseMillis=200 -XX:+Use
学习大纲
AES加解密-JAVA代码