AES加密解密

2023-10-29

​import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;


/**
 * 功能:AES加密解密工具类
 * 日期:2022-5-5
 *
 * @author lf
 */

public class AesUtil2 {

    /**
     * 私钥,用于加解密
     */
    public static final String KEY = "LYPUSRysSUWnykV5";

    /**
     * 密钥如超过16位,截至16位,不足16位,补/000至16位
     *
     * @param key 原密钥
     * @return 新密钥
     */
    public static String secureBytes(String key) {
        if (key.length() > 16) {
            key = key.substring(0, 16);
        } else if (key.length() < 16) {
            for (int i = (key.length() - 1); i < 15; i++) {
                key += "\000";
            }
        }
        return key;
    }


    /**
     * AES解密 用于数据库储存
     *
     * @param key
     * @param sSrc
     * @return
     * @throws Exception
     */
    public static String decrypt(String key, String sSrc) throws Exception {
        String sKey = secureBytes(key);

        // 判断Key是否正确
        if (sKey == null) {

            return null;
        }
        // 判断Key是否为16位
        if (sKey.length() != 16) {
            sKey = secureBytes(sKey);
        }
        byte[] raw = sKey.getBytes("ASCII");
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, skeySpec);
        byte[] encrypted1 = hex2byte(sSrc);

        byte[] original = cipher.doFinal(encrypted1);
        String originalString = new String(original, "utf-8");
        return originalString;

    }


    /**
     * AES加密
     *
     * @param key
     * @param sSrc
     * @return
     * @throws Exception
     */
    public static String encrypt(String key, String sSrc) throws Exception {

        String sKey = secureBytes(key);

        if (sSrc == null || sKey == null) {

            return null;
        }
        // 判断Key是否为16位
        if (sKey.length() != 16) {

            sKey = secureBytes(sKey);
        }
        byte[] raw = sKey.getBytes("ASCII");
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
        byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
        return byte2hex(encrypted).toLowerCase();

    }

    /**
     * @param strhex
     * @return
     */
    public static byte[] hex2byte(String strhex) {
        if (strhex == null) {
            return null;
        }
        int l = strhex.length();
        if (l % 2 != 0) {
            return null;
        }
        byte[] b = new byte[l / 2];
        for (int i = 0; i != l / 2; i++) {
            b[i] = (byte) Integer.parseInt(strhex.substring(i * 2, i * 2 + 2),
                    16);
        }
        return b;
    }

    /**
     * @param b
     * @return
     */
    public static String byte2hex(byte[] b) {
        String hs = "";
        String stmp = "";
        for (int n = 0; n < b.length; n++) {
            stmp = (Integer.toHexString(b[n] & 0XFF));
            if (stmp.length() == 1) {
                hs = hs + "0" + stmp;
            } else {
                hs = hs + stmp;
            }
        }
        return hs.toUpperCase();
    }

    public static void main(String[] args) throws Exception {
        // 待加密字符串
        String txt = "测试一下";
        // 加密
        String enTxt = AesUtil2.encrypt(KEY, txt);
        System.out.println("加密后的字符串:" + enTxt);
        // 解密
        String decTxt = AesUtil2.decrypt(KEY, enTxt);
        System.out.println("解密后的字符串:" + decTxt);
    }
}

​

结果:

 

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

AES加密解密 的相关文章

  • 如何在java中将数组值排序为循环格式?

    我的数组值如下 String value 1 2 3 4 5 6 7 8 9 10 假设如果我将值 5 传递给 tat 数组 它应该按如下顺序排序 5 6 7 8 9 10 1 2 3 4 怎么办 有人帮忙吗 感谢你 你需要的就是所谓的轮换
  • 与 Eclipse 中的 Java Content Assist 交互

    作为我的插件项目的一部分 我正在考虑与 Eclipse 在 Java 文件上显示的内容辅助列表进行交互 我正在尝试根据一些外部数据对列表进行重新排序 我看过一些有关创建新内容辅助的教程 但没有看到有关更改现有内容辅助的教程 这可能吗 如果是
  • Java 的支持向量机?

    我想用Java编写一个 智能监视器 它可以随时发出警报detects即将到来的性能问题 我的 Java 应用程序正在以结构化格式将数据写入日志文件
  • Thymeleaf 3 Spring 5 映射加载字符串而不是 HTML

    我正在尝试将 Spring 5 和 Thymeleaf 3 一起配置 我正在 Eclipse 上工作 我使用 全新安装 构建并使用 springboot run 运行应用程序 我已经设置了一个控制器和几个模板 但 Thymeleaf 似乎找
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • 如何调试“com.android.okhttp”

    在android kitkat中 URLConnection的实现已经被OkHttp取代 如何调试呢 OkHttp 位于此目录中 external okhttp android main java com squareup okhttp 当
  • 将巨大的模式编译成Java

    有两个主要工具提供了将 XSD 模式编译为 Java 的方法 xmlbeans 和 JAXB 问题是 XSD 模式确实很大 30MB 的 XML 文件 大部分模式在我的项目中没有使用 所以我可以注释掉大部分代码 但这不是一个好的解决方案 目
  • java inputstream 打印控制台内容

    sock new Socket www google com 80 out new BufferedOutputStream sock getOutputStream in new BufferedInputStream sock getI
  • 将非 Android 项目添加到 Android 项目

    我在 Eclipse 中有三个项目 Base Server 和 AndroidClient Base和Server是Java 1 7项目 而AndroidClient显然是一个android项目 基础项目具有在服务器和 Android 客户
  • 如何在 Spring 中使 @PropertyResource 优先于任何其他 application.properties ?

    我正在尝试在类路径之外添加外部配置属性资源 它应该覆盖任何现有的属性 但以下方法不起作用 SpringBootApplication PropertySource d app properties public class MyClass
  • 在Java中运行bat文件并等待

    您可能会认为从 Java 启动 bat 文件是一项简单的任务 但事实并非如此 我有一个 bat 文件 它对从文本文件读取的值循环执行一些 sql 命令 它或多或少是这样的 FOR F x in CD listOfThings txt do
  • 如何在JPanel中设置背景图片

    你好 我使用 JPanel 作为我的框架的容器 然后我真的想在我的面板中使用背景图片 我真的需要帮助 这是我到目前为止的代码 这是更新 请检查这里是我的代码 import java awt import javax swing import
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • 轻松的反应

    我有一个与这里描述的类似的案例 动态更改RESTEasy服务返回类型 https stackoverflow com questions 3786781 dynamically change resteasy service return
  • hibernate 6.0.2.Final 和 spring boot 2.7.0 的entityManagerFactory bean 未配置问题

    所以最近我想升级我的 Spring Boot 项目项目的一些依赖项 特别是这些组件 雅加达 EE 9 弹簧靴2 7 休眠 6 0 2 Final 完成此操作后 所有更新和代码折射 更新将 javax 导入到 jakarta 以及一些 hib
  • 将 JScrollPane 添加到 JFrame

    我有一个关于向 Java 框架添加组件的问题 我有一个带有两个按钮的 JPanel 和一个添加了 JTable 的 JScrollPane 我想将这两个添加到 JFrame 中 我可以将 JPanel 添加到 JFrame 或将 JScro
  • Android S8+ 警告消息“不支持当前的显示尺寸设置,可能会出现意外行为”

    我在 Samsung S8 Android 7 中收到此警告消息 APP NAME 不支持当前的显示尺寸设置 可能会 行为出乎意料 它意味着什么以及如何删除它 谢谢 通过添加解决supports screens 机器人 xlargeScre
  • 在java中以原子方式获取多个锁

    我有以下代码 注意 为了可读性 我尽可能简化了代码 如果我忘记了任何关键部分 请告诉我 public class User private Relations relations public User relations new Rela
  • java XMLSerializer 避免复杂的空元素

    我有这个代码 DocumentBuilderFactory factory DocumentBuilderFactory newInstance DocumentBuilder builder factory newDocumentBuil
  • Java RMI - 客户端超时

    我正在使用 Java RMI 构建分布式系统 它必须支持服务器丢失 如果我的客户端使用 RMI 连接到服务器 如果该服务器出现故障 例如电缆问题 我的客户端应该会收到异常 以便它可以连接到其他服务器 但是当服务器出现故障时 我的客户端什么也

随机推荐

  • python与C语言socket通信--发送、接收(解析)结构体数据

    from importlib resources import path import socket import struct import ctypes import time os tcp socket socket socket s
  • 利用STM32的FLASH模拟 EEPROM(F103)系列

    STM32的FLASH是用来存储主程序的 ST公司为了节约成本 没有加入 EEPROM 但是许多场合下我们需要用EEPROM 不过FLASH的容量还是可观的 我们可以利用FLASH模拟EEPROM 根据 STM32F10X闪存编程 中的介绍
  • 几十条业务线日志系统如何收集处理?

    在互联网迅猛发展的今天 各大厂发挥十八般武艺的收集用户的各种信息 甚至包括点击的位置 我们也经常发现自己刚搜完一个东西 再打开网页时每个小广告都会出现与之相关联的商品或信息 在感叹智能的同时不惊想 什么时候泄露的行踪 许多公司的业务平台每天
  • 关于Xshell7无法连接虚拟机的解决方案

    当我们在使用Xshell时 无法连接虚拟机 解决方法1 1 打开网络和Internet设置 2 点击更改适配器设置 3 如果发现是禁用则右键启动 解决方法二 1 如果都启动仍然连接不上 我们双击打开后 点击详细信息 发现是自动配置IPv4地
  • AR/MR技术作业

    1 图片识别与建模 环境配置 首先 在官网上注册账号 在Download页面下载相应的SDK安装到unity安装目录获取Vuforia支持 如下 然后 打开Develop页面 点击Get Development Key 然后 注册一个Lic
  • Python3------NumPy学习(一)

    NumPy学习 1 NumPy介绍 Numpy Numerical Python 是一个开源的Python科学计算库 用于快速处理任意维度的数组 Numpy支持常见的数组和矩阵操作 对于同样的数值计算任务 使用Numpy比直接使用Pytho
  • react使用++或者--改变state状态值问题和Useless constructor no-useless-constructor

    写了一个点击事件 点击一下值加一 但是点击事件如下书写无效 并未改变状态值 add this setState likes this state likes 这里应该如下书写 add this setState likes this sta
  • go interface 坑 (判空)

    interface 本质 interface 实际上是有两个字段组成 一个是类型 是一个值 在判空时 只有同时是nil 才能得到true 实际案例 在doSomething中 err是等于空的 但是传递给error这个接口后 确又不等于空了
  • 初识:梯度下降算法 (Gradient Descent) ----直线拟合散点

    我的第一个机器学习算法 梯度下降算法解决散点拟合问题 在直角坐标系中给出若干个点作为训练集 Training Set 使用梯度下降算法给出最合适的拟合直线 1 大体思路 我个人的理解 对于许多散步在直角坐标系中的点 首先给出一个初始的拟合直
  • 【Python】SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame

    一 问题描述 我在运行一段Python代码的时候 train data sales chan name train data sales chan name astype int 遇到了下面的警告 C Users XiaoWang AppD
  • 从规模优先到效益优先,产业互联网正打造新的模式

    以规模优先为主导的时代正在渐行渐远 这一点 我们可以从当下OpenAI为代表的新公司的崛起看出一丝端倪 在未来的时代 规模早已不再是决定自身价值的主要指标 效率早已不再是衡量一种商业模式是否先进的标准 效益优先 以小博大 正在开始大行其道
  • 树莓派 python3.9降级为python3.7

    今天烧录了一个官方烧录器中的最新的镜像 打开之后python的版本是3 9的 之前做的一些东西都是基于python3 7的 再重新架构十分麻烦 于是干脆就把python3 9进行降级 降为python3 7 这个镜像不像之前的一些镜像 同时
  • sql 插入一条记录并查询出记录的id值

    String sql SET NOCOUNT ON insert into yaComVehicle plateNum deComId values plateNum deComId select ident current yaComVe
  • 160825、互联网架构,如何进行容量设计?

    一 需求缘起 互联网公司 这样的场景是否似曾相识 场景一 pm要做一个很大的运营活动 技术老大杀过来 问了两个问题 1 机器能抗住么 2 如果扛不住 需要加多少台机器 场景二 系统设计阶段 技术老大杀过来 又问了两个问题 1 数据库需要分库
  • 1156 十个成绩排序(运用sort函数倒序排出)

    题目描述 期末考试结束了 陈老师找到集训队的同学 希望帮忙开发一个成绩排序的系统 这个应该难不倒集训队员的 先做一个内部小测试吧 随意输入10个学生的成绩 按从高到低的序列显示 输入要求 输入10个学生的成绩 输出要求 输出从高到低的排序结
  • “此Flash Player 与您的地区不相容”,谷歌高版本,亲测2019-2-28可以解决

    这是原地址 解决方法如下 翻墙后才是打开的正确的Adobe的官网下载地址 https get adobe com cn flashplayer 这里下载的Flash Player版本经过安装后问题得到圆满解决 不再出现地区不兼容的提示 由于
  • 代理导致安装依赖失败 vue-admin connect ETIMEDOUT 104.16.21.35:443

    今天在安装百度地图依赖时 报了下面这个错误 翻译过来的意思大概是 npm犯错 代码ETIMEDOUT npm犯错 系统调用连接 npm犯错 errno ETIMEDOUT npm犯错 网络请求https registry npmjs org
  • 「ML 实践篇」模型训练

    在训练不同机器学习算法模型时 遇到的各类训练算法大多对用户都是一个黑匣子 而理解它们实际怎么工作 对用户是很有帮助的 快速定位到合适的模型与正确的训练算法 找到一套适当的超参数等 更高效的执行错误调试 错误分析等 有助于理解 构建和训练神经
  • Openwrt添加python3 package出现错误:提示缺少对libssl的依赖

    在Openwrt中添加python3 package时出现错误 Package python3 light is missing dependencies for the following libraries libcrypto so 1
  • AES加密解密

    import javax crypto Cipher import javax crypto spec SecretKeySpec 功能 加密解密工具类 日期 2022 5 5 author lf public class AesUtil2