首页 > 编程语言 >JAVA加解密之AES

JAVA加解密之AES

时间:2023-01-28 17:14:30浏览次数:74  
标签:AES JAVA String 加解密 Cipher static import 加密

 

 

 <!--AES加密-->
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-ext-jdk16</artifactId>
            <version>1.45</version>
        </dependency>

 

 

 

 

 工具类

AesUtil.java 
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.Security;

/**
 * @author 。
 * @description AesUtil工具类
 **/
@Slf4j
public class AesUtil {


    /**
     * 初始化PKCS7Padding使用
     */
    static {
        Security.addProvider(new BouncyCastleProvider());
    }

    /**
     * 加密类型
     */
    private static final String KEY_ALGORITHM = "AES";

    /**
     * 密码器设置
     */
    private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS7Padding";


    public static void main(String[] args) throws Exception {
        String content = "你好啊";

        System.out.println("加密前: " + content);
        String encryptContent = encrypt(content, "111");
        System.out.println("加密后:" + encryptContent);
        String decryptContent = decrypt(encryptContent, "111");
        ;
        System.out.println("解密后:" + decryptContent);


    }


    /**
     * AES加密
     *
     * @param content 需要加密的字符串
     * @param key     字符长度必须为16, 24, 32
     * @return 返回Base64转码后的加密数据
     */
    public static String encrypt(String content, String key) throws Exception {
        // 创建密码器
        Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);

        byte[] byteContent = content.getBytes(StandardCharsets.UTF_8);

        // 初始化为加密模式的密码器
        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), KEY_ALGORITHM));

        // 加密
        byte[] result = cipher.doFinal(byteContent);

        //通过Base64转码返回
        String s = Base64.encodeBase64String(result);
        return s;

    }

    /**
     * AES解密
     *
     * @param encrypted 已加密的密文
     * @param key       字符长度必须为16, 24, 32
     * @return 返回解密后的数据
     */
    public static String decrypt(String encrypted, String key) throws Exception {

        //实例化
        Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);

        //使用密钥初始化,设置为解密模式
        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8), KEY_ALGORITHM));

        //执行操作
        byte[] result = cipher.doFinal(Base64.decodeBase64(encrypted));

        String s = new String(result, StandardCharsets.UTF_8);
        return s;
    }


}

 

 

 

 

 JS加解密之AES:https://www.cnblogs.com/pxblog/p/17070480.html

 

标签:AES,JAVA,String,加解密,Cipher,static,import,加密
From: https://www.cnblogs.com/pxblog/p/17070855.html

相关文章

  • JavaWeb-Filter&Listener
    JavaWeb-Filter&Listener1,Filter1.1Filter概述Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。过滤器可以把对资源的请求拦截下来,从而实现......
  • 如何通过Java代码向Word文档添加文档属性
    Word文档属性包括常规、摘要、统计、内容、自定义。其中摘要包括标题、主题、作者、经理、单位、类别、关键词、备注等项目。属性相当于文档的名片,可以添加你想要的注释、说......
  • macos:安装java 17.0.6(android studio报错:Unable to locate a Java Runtime.)
    一,报错信息:androidstudio的报错信息:Theoperationcouldn’tbecompleted.UnabletolocateaJavaRuntime.Pleasevisithttp://www.java.comforinformation......
  • 【Java】@Scheduled注解各参数详解
    每隔5秒执行一次:*/5****?每隔1分钟执行一次:0*/1***?每天23点执行一次:0023**?每天凌晨1点执行一次:001**?每月1号凌晨1点执行一次:0011*?每月......
  • 【Java】取n工作日后的日期(仅排除周六周日)
    importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.time.*;importjava.time.format.DateTimeFormatter;importjava.util.Calendar;i......
  • java学习笔记
    目录1开始使用1.1将java路径加到path变量1.2编写HelloWorld程序1.3编译和运行1.4多个文件的编译与运行:2控制执行流程2.1if-elseif-else2.2switch-case2.3wh......
  • JAVA流程控制
    JAVA流程控制使用Scanner类输入publicclassScannerTest1{publicstaticvoidmain(String[]args){//创建一个扫描器对象,用于接收键盘数据Sc......
  • 【Java001】Map集合遍历
    【Java001】Map集合遍历大家好,我们的gzh是朝阳三只大明白,满满全是干货,分享近期的学习知识以及个人总结(包括读研和IT),跪求一波关注,希望和大家一起努力、进步!!方式1使用Map.Entr......
  • JS加解密之AES
      demo<scriptsrc="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.min.js"></script><script>alert(aesDecrypt(aesEncrypt("yvioo","wa1234535")......
  • Java数组的使用
    本文介绍了在java开发中经常使用的数组,以及数组的使用方法,注意事项。一.什么是数组1.数组:数组即是一堆逻辑上无序的元素的序列,用来存储多个相同类型的数据,数组可以看做是一......