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 加解密 的相关文章

  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • 普罗米修斯指标 - 未找到

    我有 Spring Boot 应用程序 并且正在使用 vertx 我想监控服务和 jvm 为此我选择了 Prometheus 这是我的监控配置类 Configuration public class MonitoringConfig Bea
  • 如何在 Java 中测试一个类是否正确实现了 Serialized(不仅仅是 Serialized 的实例)

    我正在实现一个可序列化的类 因此它是一个与 RMI 一起使用的值对象 但我需要测试一下 有没有办法轻松做到这一点 澄清 我正在实现该类 因此在类定义中添加 Serialized 很简单 我需要手动序列化 反序列化它以查看它是否有效 我找到了
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • react-native run-android 失败并出现错误:任务 ':app:dexDebug' 执行失败

    我使用的是 Windows 8 1 和react native cli 1 0 0 and react native 0 31 0 添加后react native maps对于该项目 我运行了命令react native upgrade并给
  • 如何在selenium服务器上提供自定义功能?

    我知道可以通过某种方法获得一些硒功能 其中之一如下 driver getCapabilities getBrowserName 它返回浏览器名称的值 但如果它指的是一个可用的方法 如果我没有误解的话 这似乎与自定义功能有关 就像我的意思是
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • Python 3 中“map”类型的对象没有 len()

    我在使用 Python 3 时遇到问题 我得到了 Python 2 7 代码 目前我正在尝试更新它 我收到错误 类型错误 map 类型的对象没有 len 在这部分 str len seed candidates 在我像这样初始化它之前 se
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 循环标记时出现“ValueError:无法识别的标记样式 -d”

    我正在尝试编码pyplot允许不同标记样式的绘图 这些图是循环生成的 标记是从列表中选取的 为了演示目的 我还提供了一个颜色列表 版本是Python 2 7 9 IPython 3 0 0 matplotlib 1 4 3 这是一个简单的代
  • ServletContainer 类未找到异常

    我无法再编译我的球衣项目 并且出现以下异常 GRAVE Servlet Project API threw load exception java lang ClassNotFoundException com sun jersey spi
  • PyAudio ErrNo 输入溢出 -9981

    我遇到了与用户相同的错误 Python 使用 Pyaudio 以 16000Hz 录制音频时出错 https stackoverflow com questions 12994981 python error audio recording

随机推荐

  • 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