[java]java使用AES加密解密 ,AES-128/192/256-ECB加密模式

2023-10-27

直接上代码,是在springboot下直接test的

import org.apache.commons.codec.binary.Base64;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Date;

@RunWith(SpringRunner.class)
@SpringBootTest
public class RestapiApplicationTests {

    // 加密
    public static String Encrypt(String sSrc, String sKey) throws Exception {
        if (sKey == null) {
            System.out.print("Key为空null");
            return null;
        }
        // 判断Key是否为16位
        if (sKey.length() != 16) {
            System.out.print("Key长度不是16位");
            return null;
        }
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        kgen.init(128, new SecureRandom(sKey.getBytes()));
        SecretKey secretKey = kgen.generateKey();
        byte[] enCodeFormat = secretKey.getEncoded();
        SecretKeySpec skeySpec = new SecretKeySpec(enCodeFormat , "AES");

        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式"
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
        byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));

        return new Base64().encodeToString(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
    }

    // 解密
    public static String Decrypt(String sSrc, String sKey) throws Exception {
        try {
            // 判断Key是否正确
            if (sKey == null) {
                System.out.print("Key为空null");
                return null;
            }
            // 判断Key是否为16位
            if (sKey.length() != 16) {
                System.out.print("Key长度不是16位");
                return null;
            }
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            kgen.init(128, new SecureRandom(sKey.getBytes()));
            SecretKey secretKey = kgen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            SecretKeySpec skeySpec = new SecretKeySpec(enCodeFormat , "AES");

            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
            byte[] encrypted1 = new Base64().decode(sSrc);//先用base64解密
            try {
                byte[] original = cipher.doFinal(encrypted1);
                String originalString = new String(original,"utf-8");
                return originalString;
            } catch (Exception e) {
                System.out.println(e.toString());
                return null;
            }
        } catch (Exception ex) {
            System.out.println(ex.toString());
            return null;
        }
    }

    @Test
    public void test() throws Exception {
        /*
         * 此处使用AES-128-ECB加密模式,key需要为16位。
         */
        String cKey = "1234567890123456";
        // 需要加密的字串
        String cSrc = "hello";
        System.out.println(cSrc);
        // 加密
        String enString = RestapiApplicationTests.Encrypt(cSrc, cKey);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
        System.out.println("时间:" + simpleDateFormat.format(new Date()) + "加密后的字串是:" + enString);
        // 解密
        String DeString = RestapiApplicationTests.Decrypt(enString, cKey);
        System.out.println("时间:" + simpleDateFormat.format(new Date()) + "解密后的字串是:" + DeString);
    }
}

其他模式大同小异,动动脑子,就差不多了

效果
这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[java]java使用AES加密解密 ,AES-128/192/256-ECB加密模式 的相关文章

  • Android NumberPicker 带字符串

    I have customised the NumberPicker to show text The output is this 当我按 确定 时 我想将 e x 鼠标添加到我的列表 文章 中 我得到的是索引值 int 它由 array
  • Firebase 查询 Or'ing whereEqualTo 以获得可能值的列表

    我见过之前针对早期版本的 Firebase 提出过这个问题 https stackoverflow com questions 26700924 query based on multiple where clauses in fireba
  • 在 Kotlin 中实现返回 Collection 的 Java 方法

    我将 Kotlin 与 Spring Security 结合使用 实现该方法时 public interface UserDetails extends Serializable Collection
  • JPanel透明背景和显示元素[重复]

    这个问题在这里已经有答案了 我插入一个背景图e 变成 aJPanel但一些界面元素消失了 以下 Java Swing 元素不会出现 标签标题 标签 usuario 标签 密码 按钮加速器 你能否使图像透明或元素不透明 setOpaque f
  • Java Swing:清除JList而不触发监听器

    我的情况如下 我有一个 JList 只要在列表中进行选择 它就会触发搜索 使用 ListSelectionListener 我正在尝试使用以下命令重置列表上的选择list clearSelection 这样做的问题是使用clearSelec
  • .java 和 .scala 类之间是否可能存在循环依赖?

    假设我在 java 文件中定义了类 A 在 scala 文件中定义了类 B A 类使用 B 类 B 类使用 A 类 如果我使用 java 编译器 则会出现编译错误 因为 B 类尚未编译 如果我使用scala编译器A类将找不到 有没有可以同时
  • @PreUpdate 不适用于 Spring Data JPA

    我有一个实体 Entity EntityListeners MyEntityListener class class MyEntity 还有听者 class MyEntityListener PrePersist PreUpdate pub
  • Java:检查给定日期是否在当前月份内

    我需要检查给定的日期是否在当前月份 我编写了以下代码 但 IDE 提醒我getMonth https docs oracle com javase 7 docs api java util Date html getMonth and ge
  • 业务代表与服务定位器

    Business Delegate 和 Service Locator 之间有什么区别 两者都负责封装查找和创建机制 如果 Business Delegate 使用 Service Locator 来隐藏查找和创建机制 那么 Busines
  • 独占锁定ConcurrentHashMap

    我知道不可能锁定 ConcurrentHashMap 进行独占访问 但是 我找不到原因 是因为构成CHM的 Segment 没有被api公开吗 据推测 如果是的话 客户端代码可以执行 交接 锁定 Cheers 我知道不可能锁定 Concur
  • LibGdx 如何使用 OrthographicCamera 滚动?

    我已经找了 10 个小时 字面意思 我已经完成了 我需要问一下 事情是我正在学习如何使用 LibGdx 来编写 Java 游戏 我正在做一个水平太空飞船游戏 所以 我最糟糕的问题是我不知道如何滚动 我认为绘制会更好地解释 我想绘制一个巨大的
  • grails 上的同步块在 Windows 上有效,但在 Linux 上无效

    我有一个 grails 应用程序 它依赖于服务中的同步块 当我在 Windows 上运行它时 同步按预期工作 但当我在 ams linux 上运行时 会出现 StaleObjectStateException 该问题在以下示例中重现 cla
  • 嵌入式 tomcat 7 servlet 3.0 注释不起作用

    我有一个精简的测试项目 其中包含 Servlet 版本 3 0 用注释声明 如下所示 WebServlet test public class TestServlet extends HttpServlet private static f
  • 存储过程将多个表返回到 spring jdbc 模板

    我正在使用 JdbcTemplate 从 Spring DAO 类调用存储过程 我的问题是 存储过程返回多个表 有没有办法使用 Spring JdbcTemplate 访问多个表 如果我使用jdbcTemplate queryForList
  • 用 Java 创建迷宫求解算法

    我被分配了用 Java 创建迷宫求解器的任务 这是任务 Write an application that finds a path through a maze The maze should be read from a file A
  • Scala repl 抛出错误

    当我打字时scala在终端上启动 repl 它会抛出此错误 scala gt init error error while loading AnnotatedElement class file usr lib jvm java 8 ora
  • Java SE + Spring Data + Hibernate

    我正在尝试使用 Spring Data Hibernate 启动 Java SE 应用程序 并且到目前为止已经完成了以下操作 配置文件 Configuration PropertySource classpath hibernate pro
  • JDK 7 的快速调试/调试构建

    我正在寻找 JDK 的调试 或者我猜他们称之为快速调试构建 以启用在运行时生成的打印程序集以及查找性能问题时所需的其他诊断 就目前情况而言 我似乎找不到可以直接使用的 现成的 快速调试构建二进制包 有人可以帮我提供下载链接 或者至少提供有关
  • Java泛型类型

    当我有一个界面时 public interface Foo
  • 使用 Android 的 Mobile Vision API 扫描二维码

    我跟着这个tutorial http code tutsplus com tutorials reading qr codes using the mobile vision api cms 24680关于如何构建可以扫描二维码的 Andr

随机推荐

  • React中使用CSS样式的五种方法,主流推荐CSS Modules和Styled Components

    前言 由于 React的JSX语法 能在React中使用样式的方式有很多 本文主要介绍在React中经常使用CSS样式的五种方法 1行内样式 2声明样式 3引入样式 4 CSS Modules模块化 5 Styled component 1
  • DolphinScheduler3.0.1(数据质量)

    DolphinScheduler3 0 1 数据质量 Refer 1 data quality jar包修改 1 配置文件修改 2 依赖不明确问题 3 scope多修改问题 2 实现方式 1 Spark提交 2 结构解析 1 图1 2 图2
  • Blender一些建模技巧与应用

    平滑卡线 加线 卡结构线 加线 时 按E均匀线条会使加线与边线均匀对齐 投影切割 投影切割 使用调形后的曲线 放到模型表面上方进行投影切割 投影形状是 曲线范围内所能看到的模型 就是切割后的形状 使用流程 1 调整好曲线与屏幕的角度 想完全
  • 并行计算之OpenMP简介

    OpenMP环境安装 基于ubuntu20 04 sudo apt get update sudo apt get install libomp dev OpenMP概述 面向多线程并行编码的编译指导语句 如 pragma omp para
  • ssh连接远程主机执行脚本的环境变量问题

    近日在使用ssh命令ssh user remote myscript sh登陆到远程机器remote上执行脚本时 遇到一个奇怪的问题 myscript sh line n app command not found app是一个新安装的程序
  • ElasticSearch7之function_socre使用心得

    介绍 1 function score是可以修改查询检索文档的分数 使用function score必须定义 一个查询和一个或多个函数 为查询返回的每个文档计算一个新的分数 function score提供的评分函数 1 weight 设置
  • UReport2 报表设计器 在线表格

    UReport2官网 一 UReport2报表设计器 UReport2是一个开源的可视化报表设计器 功能强大 操作简单 可以实现复杂的报表统计 有各种各样的导出和打印功能 支持导入Excel表格 1 报表设计器 2 设计一个简单的用户列表展
  • ifstream之seekg/tellg

    声明 我个人特别讨厌 收费专栏 关注博主才可阅读等行为 推崇知识自由分享 推崇开源精神 呼吁你一起加入 大家共同成长进步 在文件读写的时候 一般需要借助fstream来进行文件操作 常见的操作有seekg 和tellg 但是这两个函数有一些
  • 机器学习之——单变量线性回归

    线性回归 线性回归 Linear Regression 作为Machine Learning 整个课程的切入例子确实有独到的地方 以简单的例子为出发点 将学习任务的主干串起来 问题的建模可以简单如下图所示 线性回归可以分为单变量线性回归 L
  • media sdk 性能优化

    https software intel com sites default files m 2 0 a 7 9 28439 Intel Media SDK E4 B9 8B E4 BC 98 E5 8C 96 E6 8A 80 E6 9C
  • SQLServer开启远程连接

    一 在需要被远程连接的电脑客户端中打开命令提示符输入 ipconfig 找到IPV4地址 二 在SQLServer配置管理器中找到端口 三 1 打开 控制面板 2 打开 系统和安全 3 打开 WindowDefender防火墙 4 打开 高
  • C#中 Console方法介绍

    一般情况下 我们用来输入信息的方法主要是用到如下四个 1 console log 用于输出普通信息 2 console info 用于输出提示性信息 3 console error 用于输出错误信息 4 console warn 用于输出警
  • 20世纪最好的十大算法、算法笔记(2008-11-15 22:16:57、2011-04-21 19:29:05)

    Algorithm 算法 一词与9世纪的阿拉伯学者al Khwarizmi有关 他写的书 al jabr w al muqabalah 代数学 演变成为现在中学的代数教科书 Ad Khwarizmi强调求解问题的有条理的步骤 20世纪最好的
  • 启动虚拟机异常(完整版)——如果已在 BIOS/固件设置中禁用 Intel VT-x,或主机自更改此设置后从未重新启动,则Intel VT-x处于禁用状态

    创建了Linux虚拟机 点击 开机 之后 报了这个错误 笔记本电脑 我的 联想天逸 笔记本电脑 许多键与其他的 比如 华硕笔记本电脑 不同 想在操作系统中按F2 要Fn加 减音量 才有F2的功能 我将这个思想带到 启动BIOS 中 害惨了我
  • vue 使用 wangeditor 富文本编辑器

    wangeditor 是一个轻量级 web 富文本编辑器 配置方便 使用简单 1 安装 wangeditor 终端安装 wangeditor 库 yarn add wangeditor editor 或者 npm install wange
  • 腾讯云数据库CDB技术演进之路

    IT168 专稿 本文根据 2016 第八届系统架构师大会 微信搜索SACC2013 关注系统架构师大会公众号 现场演讲嘉宾程彬老师分享内容整理而成 录音整理及文字编辑IT168 田晓旭 老鱼 嘉宾简介 程彬 腾讯基础架构部数据库研发负责人
  • SQLSERVR 转换为数字类型numeric时出现算数溢出错误

    SQLSERVR 转换为数字类型numeric时出现算数溢出错误 情况一 在SQLSERVER中 关于数据的计算可能会导致出现如下的错误 遇到这类问题 一般都是由于结果超过了这个字段的长度 个字段的属性的概念 create table T1
  • 教你怎么用Vulnhub来搭建环境

    0x01 前言 Vulnhub它是一个提供各种漏洞环境的平台 里面大部分的环境是要用VMware或者VirtualBox打开运行的 如果只是练习一些常见的漏洞可以看我另外两篇用Docker来搭建各种漏洞靶场 妈妈再也不用担心我没有靶场练习了
  • 递归实现全排列

    设 R r1 r2 rn 是需要排列的 N 个元素 Ri R ri 设集合 中的元素 全排列记 为 Perm X ri Perm X 表示在 全排列 Perm X 的每一个排列前加上前缀 ri 得到的全排列 例如在 Perm X 的排列为
  • [java]java使用AES加密解密 ,AES-128/192/256-ECB加密模式

    直接上代码 是在springboot下直接test的 import org apache commons codec binary Base64 import org junit Test import org junit runner R