java 实现 AES 加解密

2023-10-30

package com.dechnic.tfoms.util;

import org.apache.shiro.crypto.hash.Sha256Hash;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

/**
 * @ desc:
 * @ Author:  houqida
 * @ Date  :  2023/6/28
 */
public class EncryptUtil {
    private static final Logger logger = LoggerFactory.getLogger(EncryptUtil.class);
    public static String decryptAes(String sSrc,String sKey){
        try {
            if (sKey == null) {
                logger.info("Key为空null");
                return "";
            }

            if (sKey.length() != 16) {
                logger.info("Key长度不是16位");
                return "";
            }

            byte[] raw = sKey.getBytes("utf-8");
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
            byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);

            try {
                byte[] original = cipher.doFinal(encrypted1);
                String originalString = new String(original,"utf-8");
                return originalString;
            } catch (Exception e) {
                logger.error("密码解密出错",e);
                return null;
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }

    public static String encryptAes(String sSrc,String sKey){
        if (sKey == null) {
            logger.info("Key为空null");
            return "";
        }

        if (sKey.length() != 16) {
            logger.info("Key长度不是16位");
            return "";
        }
        try {
            byte[] raw = sKey.getBytes("utf-8");
            SecretKeySpec skeySpec = new SecretKeySpec(raw,"AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE,skeySpec);
            byte[] bytes = cipher.doFinal(sSrc.getBytes(StandardCharsets.UTF_8));
            return new BASE64Encoder().encode(bytes);
        } catch (UnsupportedEncodingException | NoSuchAlgorithmException | NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        }
        return null;
    }
}

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

java 实现 AES 加解密 的相关文章

  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • 在 Java 中将弯音发送到 MIDI 音序器

    我了解启动和运行 MIDI 音序器的基础知识 并且希望能够在播放过程中增加 减小序列的音高 但弯音是发送到合成器而不是音序器的消息 我尝试将音序器的接收器设置为合成器的发射器 当我发送弯音短消息时 音序器保持相同的音调 但随后合成器以新的弯
  • 如何在 Python 中解析和比较 ISO 8601 持续时间? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 Python v2 库 它允许我解析和比较 ISO 8601 持续时间may处于不同单
  • 如何使用python在一个文件中写入多行

    如果我知道要写多少行 我就知道如何将多行写入一个文件 但是 当我想写多行时 问题就出现了 但是 我不知道它们会是多少 我正在开发一个应用程序 它从网站上抓取并将结果的链接存储在文本文件中 但是 我们不知道它会回复多少行 我的代码现在如下 r
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • 如何通过 TLS 1.2 运行 django runserver

    我正在本地 Mac OS X 机器上测试 Stripe 订单 我正在实现这段代码 stripe api key settings STRIPE SECRET order stripe Order create currency usd em
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • javascript 是否有等效的 __repr__ ?

    我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
  • pip 列出活动 virtualenv 中的全局包

    将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • Android Gradle 同步失败:无法解析配置“:classpath”的所有工件

    错误如下 Caused by org gradle api internal artifacts ivyservice DefaultLenientConfiguration ArtifactResolveException Could n
  • 如何初始化静态地图?

    你会如何初始化静态Map在Java中 方法一 静态初始化方法二 实例初始化 匿名子类 或者 还有其他方法吗 各自的优点和缺点是什么 这是说明这两种方法的示例 import java util HashMap import java util
  • 根据列 value_counts 过滤数据框(pandas)

    我是第一次尝试熊猫 我有一个包含两列的数据框 user id and string 每个 user id 可能有多个字符串 因此会多次出现在数据帧中 我想从中导出另一个数据框 一个只有那些user ids列出至少有 2 个或更多string
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我
  • 为什么应该首选 Java 类的接口?

    PMD https pmd github io 将举报以下违规行为 ArrayList list new ArrayList 违规行为是 避免使用 ArrayList 等实现类型 而是使用接口 以下行将纠正违规行为 List list ne
  • Django-tables2 列总计

    我正在尝试使用此总结列中的所有值文档 https github com bradleyayers django tables2 blob master docs pages column headers and footers rst 但页
  • 如何计算Python中字典中最常见的前10个值

    我对 python 和一般编程都很陌生 所以请友善 我正在尝试分析包含音乐信息的 csv 文件并返回最常听的前 n 个乐队 从下面的代码中 每听一首歌曲都是一个列表中的字典条目 格式如下 album Exile on Main Street
  • 如何在不同版本的Google App Engine中使用自定义域名?

    我使用谷歌应用程序引擎作为我的 Android 和 Web 应用程序的服务器 我使用 Android Studio 开发了 Android 应用程序 并使用 Eclipse 开发了 Web 应用程序 我在应用程序引擎中部署了两个版本 第一个
  • 如何捕获 try-with-resource 语句中 close 方法抛出的异常

    我正在读关于try with resourceJava 中的语句可用于指定任意数量的资源 try Resource1 res1 initialize code Resource1 res2 initialize code statement
  • 使用随机放置的 NaN 创建示例 numpy 数组

    出于测试目的 我想创建一个M by Nnumpy 数组与c随机放置的 NaN import numpy as np M 10 N 5 c 15 A np random randn M N A mask np nan 我在创建时遇到问题mas

随机推荐

  • python定义一个复数类complex、并实现复数相加_声明复数的类complex,使用友元函数add实现复数的加法? 1.定义复数Comple...

    include using namespace std class Complex private double real image public Complex Complex double a double b real a imag
  • 从User-Agent获取浏览器类型

    一 User Agent User Agent首部包含一个特征字符串 用来让网络协议的对端来识别发起请求的用户代理软件的应用类型 操作系统 软件开发商以及版本号 二 从User Agent中获取浏览器类型 1 通过自己编写js代码识别UA字
  • 计算机网络用户接入层设计

    用户接入层为用户提供访问核心网络的能力 为用户提供共享 交换的带宽分配 按照业主要求 并考虑到端口密度的要求以及 设备的性能价格比 建议选用 Catalyst 3524XL和 Catalyst 3548XL 工作组交换 机 分别放置于配线间
  • SpringBoot集成Shiro安全框架

    SpringBoot集成Shiro安全框架 1 shiro的定义 2 SpringBoot集成shiro的步骤 3 完成的效果 1 shiro的定义 1 shiro的作用 认证 授权 加密 会话管理 Web集成 缓存 2 shiro的名词
  • tms sparkle创建server以及module实例

    1 使用wizard创建sparkle服务器 2 创建unit1 unit2 unit3单元文件 unit Unit1 interface uses System SysUtils Sparkle HttpServer Module Spa
  • android view平稳滚动,Flutter混合开发——一种另类却高效的的原生View嵌入方法

    前言 随着使用Flutter开发的深入加之其生态还不完善 必然会涉及到使用原生View的情况 为此 Flutter也为我们提供了PlatformView方便我们嵌入原生View 以实现一些flutter暂时不支持的功能 但由此也引发了一些性
  • SQL自定义排序

    方法一 比如需要对SQL表中的字段NAME进行如下的排序 张三 Z 李四 L 王五 W 赵六 Z 按照sql中的默认排序规则 根据字母顺序 a z 排 结果为 李四 王五 赵六 张三 自定义排序 order by charindex NAM
  • Linux Shell/python等脚本总结

    转换为大写字母 bin bash upper Usage upper string printf s n 1 upper 1 文本内容排序 sorted file name py usr bin env python3 file open
  • 美化Cadence Library Manager

    完整版请参考 https mazhaoxin github io 2019 01 09 Pretty Cadence Libmanager http 483v7j coding pages com 2019 01 09 Pretty Cad
  • js里的$符号的作用

    今天在看数据库js代码 javascript还没看完 很多 符号 有点晕 查了一下 下面是感觉解决了我疑问的答案 原文地址 https www cnblogs com yongtaiyu archive 2011 05 13 2045726
  • 查看Linux内核配置文件(.config)

    config是内核配置文件 在不同场景下获得方法不一样 1 源代码 在kernel文件夹下 按快捷键 Ctrl H 显示隐藏文件 即可找到 config文件 2 当前Linux系统 当前的Linux内核的配置文件保存到了 proc conf
  • python中摄氏度的符号咋打_linux下怎么方便的输入度数符号 °

    你的位置 问答吧 gt Linux 入门 gt 问题详情 linux下怎么方便的输入度数符号 在windows下可以用Alt 0176输入 在MAC下也有方便的方法可以输入 在linux下呢 参见 http anonymouse org c
  • maven pox.xml记录

  • STM32中SPI数据读取、调试过程中问题的探讨。

    1 SPI总线读取数据 许多STM32的SPI数据读取存在问题 举个例子 设备现需要3个命令 通过命令字才能将我们需要的数据输出 则SPI通讯过程就是 D0 gt D1 gt D2 gt 空数据 0x00 gt 读取数据 然而 由于SPI结
  • 超越DALL·E

    目录 摘要 引言 方法 文本条件扩散模型 无分类器指导的微调 图像绘画 带噪 CLIP 模型 结果 欢迎关注 CVHub 官方微信公众号 Title GLIDE Towards Photorealistic Image Generation
  • RabbitMQ内存监控及自动重启的shell脚本

    RabbitMQ内存监控及自动重启 功能简介 Shell脚本 systemd托管 这个脚本是用来监控 RabbitMQ 进程的内存占用情况 如果内存占用超过设定的阈值并且达到设定的检查次数 则自动重启 RabbitMQ 服务 功能简介 脚本
  • SaaS、PaaS、IaaS云服务模式和商业云平台设计与建设方案

    1 云计算的三种服务模式 云计算是一种新的计算资源使用模式 云端本身还是 IT 系统 所以逻辑上同样可以划分为这四层 底三层可以再划分出很多 小块 并出租出去 这有点像立体停车房 按车位大小和停车时间长短收取停车费 因此 云服务提供商出租计
  • TS 错误property does not exist on type Object

    在TypeScript中如果按JS的方式去获取对象属性 有时会提示形如Property value does not exist on type Object 的错误 具体代码如下 var obj Object Object create
  • JAVA代码规则对照表

    JAVA代码规则对照表 Try with resources should be used 应该使用带有资源的Try with resources Creating cookies without the secure flag is se
  • java 实现 AES 加解密

    package com dechnic tfoms util import org apache shiro crypto hash Sha256Hash import org slf4j Logger import org slf4j L