Java AES加密工具类

以下是一个简单的AES加密示例

import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;/*** @author Sakura* @date 2023/8/16 14:54* @Description 测试网站 http://tool.chacuo.net/cryptaes*/
public class AESUtil {private static final String KEY_ALGORITHM = "AES";private static final String DEFAULT_CIPHER_ALGORITHM  = "AES/ECB/PKCS5Padding";/*** @param content 待加密字符串* @param salt 加密盐* @return*/public static String encrypt(String content, String salt) {try {//获得密码的字节数组byte[] raw = salt.getBytes();//根据密码生成AES密钥SecretKeySpec skey = new SecretKeySpec(raw, KEY_ALGORITHM);//根据指定算法ALGORITHM自成密码器Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);//初始化密码器,第一个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作,第二个参数为生成的AES密钥 16位cipher.init(Cipher.ENCRYPT_MODE, skey);//获取加密内容的字节数组(设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码byte [] byte_content = content.getBytes("utf-8");//密码器加密数据byte [] encode_content = cipher.doFinal(byte_content);//将加密后的数据转换为Base64编码的字符串返回return Base64.encodeBase64String(encode_content);} catch (Exception e) {e.printStackTrace();return null;}}/*** @param content 待解密字符串* @param salt 解密盐* @return*/public static String decrypt(String content, String salt) {try {//获得密码的字节数组byte[] raw = salt.getBytes();//根据密码生成AES密钥SecretKeySpec skey = new SecretKeySpec(raw, KEY_ALGORITHM);//根据指定算法ALGORITHM自成密码器Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);//初始化密码器,第一个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作,第二个参数为生成的AES密钥cipher.init(Cipher.DECRYPT_MODE, skey);//把密文字符串Base64转回密文字节数组byte [] encode_content = Base64.decodeBase64(content);//密码器解密数据byte [] byte_content = cipher.doFinal(encode_content);//将解密后的数据转换为字符串返回return new String(byte_content,"utf-8");} catch (Exception e) {e.printStackTrace();return null;}}public static void main(String[] args) {String str = encrypt("13100000000", "1186738753e64f8cbc26857215ec934f");System.out.println(str);String str1 = decrypt("ppLyUqR9IbYueAvbNQbiaQ==", "1186738753e64f8cbc26857215ec934f");System.out.println(str1);}}

在做AES加密的时候一定要注意private static final String DEFAULT_CIPHER_ALGORITHM = “AES/ECB/PKCS5Padding” 这个参数,很多时候前后端加密解密不一致都是这里配置不一致导致的

AES:
AES 是一种对称加密算法,使用相同的密钥进行加密和解密操作。
它是被广泛使用的加密标准,提供了高效且安全的数据加密。

ECB(Electronic Codebook Mode):
ECB 是最简单的加密模式,每个明文块独立加密成密文块。
缺点是相同的明文块会被加密成相同的密文块,容易受到模式分析攻击,因此不适合加密大数据或高安全性需求的场景。
举例来说,如果你加密的文本有很多重复的模式,使用 ECB 模式会暴露这些重复模式的信息,降低安全性。

PKCS5Padding:
PKCS5Padding 是一种填充方式,用于将明文数据填充到符合块大小的倍数。
AES 是块加密算法,通常处理 16 字节(128 位)大小的块。如果明文数据不是 16 字节的倍数,就需要进行填充。
PKCS5Padding 会根据需要填充的字节数,用相应的字节值进行填充。例如,如果需要填充 5 个字节,则填充值是 0x05,这样解密时可以轻松去除填充部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/31010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何避免在React中的回调函数中使用箭头函数可能引起的内存泄漏?

在React中,箭头函数在回调函数中的使用确实可能引发性能问题,尤其是当这些函数在渲染方法或者组件内部被定义时。每次组件重新渲染时,都会创建这些函数的新实例,这可能导致不必要的计算和内存使用,甚至在某些情况下引发…

2024年了,上大学可以不需要用到电脑吗?

前言 在2024年的今天,电脑已经成为了人们工作生活的一大部分。Oh, no!好像手机才是。 好像每个人都是这样的:可以没有电脑,但不能没有手机…… 所以2024年的今天,上大学的小伙伴们可以不需要用到电脑吗?…

【OCPP】ocpp1.6协议第4.7章节Meter Values的介绍及翻译

目录 4.7、仪表值MeterValues-概述 MeterValues 请求消息 MeterValues 响应消息 使用场景 1. 定期报告 2. 事务相关报告 示例 MeterValues 请求示例 处理 MeterValues 响应 示例代码 构建和发送 MeterValues 请求 可能的错误处理 总结 4.7、仪表值MeterValues-原…

3D打印随形透气钢引领模具排气新潮流

随着模具制造技术的不断发展,金属3D打印技术正逐渐成为模具制造领域的一大亮点。除了已广泛应用的随形水路技术外,金属3D打印在解决模具困气问题上同样展现出独特优势,成为模具排气、解决困气的重要技术方向。 模具的排气系统一直是模具设计制…

前端菜鸡学习日记 -- computed和watch的用法

目录 1.computed: 2.watch: 哈喽哇大家,又是新的一周,因为一些特殊的原因,所以目前是比较闲的,就趁机多学习一点东西把,这些学习日记就是学习中的笔记咯,流水账日记则是工作中遇到…

USB CDC简介

USB CDC类、USB2.0标准与PSTN之间的关系 CDC(Communication Device Class)类是USB2.0标准下的一个子类,定义了通信相关设备的抽象集合。它与USB2.0标准以及其下的子类的相互关系如下图所示: 如上图,USB2.0标准下定义了很多子类,有音频类&…

计算机网络知识点汇总(三)

1.2 计算机网络体系结构与参考模型 1.2.1 计算机网络分层结构 计算机网络的各层及其协议的集合称为网络的体系结构(Architecture)。换言之,计算机网络的体系结构就是这个计算机网络及其所应完成的功能的精确定义。要强调的是,这些功能究竟是用何种硬件…

Java数据结构与算法(完全背包)

前言: 完全背包问题是背包问题的一个变种,与0/1背包问题不同,在完全背包问题中,每种物品可以被选取多次。问题描述如下: 给定 n 件物品,每件物品有一个重量 wi和一个价值 vi,以及一个背包,它能…

性能测试(五)—— 数据库性能测试-mysql

1 mysql性能测试的主要内容 MySQL数据库介绍MySQL数据库监控指标MySQL慢查询工作原理及操作SQL的分析与调优方法MySQL索引的概念及作用MySQL索引的工作原理与设计规范MySQL存储引擎MySQL实时监控MySQL集群监控方案MySQL性能测试的用例准备使用Jmeter开发MySQL性能测试脚本执行…

Windows更新报错 0xc1900101 0x30018 解决方案

卸载自带的电脑管家(比如华硕、联想、华为等) 通过禁用第三方驱动启动Windows(winr 运行 msconfig),然后禁用掉第三方服务,重启系统。 检查更新,应该问题就能解决 记得重新运行msconfig&…

1分钟解决海康威视摄像头网页预览失败显示纯灰色问题

先用老IE浏览器登录,会提醒下载插件 下载这个Web的插件安装后,重开网页就都能看了

使用 Python 中的美丽汤进行网络数据解析的完整指南

Beautiful Soup 是一个广泛使用的 Python 库,在数据提取方面发挥着重要作用。它为解析 HTML 和 XML 文档提供了强大的工具,使从网页中轻松提取有价值的数据成为可能。该库简化了处理互联网上非结构化内容的复杂过程,使您可以将原始网页数据转…

【C语言】函数指针

首先看一段代码&#xff1a; #include <stdio.h>void test(){printf("hehe\n");}int main(){printf("%p\n", test);printf("%p\n", &test);return 0;} 输出的结果&#xff1a; 输出的是两个地址&#xff0c;这两个地址是 test 函数的…

Nuxt 3组件开发与管理

title: Nuxt 3组件开发与管理 date: 2024/6/20 updated: 2024/6/20 author: cmdragon excerpt: 摘要&#xff1a;本文深入探讨了Nuxt 3的组件开发与管理&#xff0c;从基础概念、安装配置、目录结构、组件分类与开发实践、生命周期与优化&#xff0c;到测试与维护策略。详细…

源代码保密的七种有效方法分享

在当今数字化时代&#xff0c;访问安全和数据安全成为企业面临的重要挑战。传统的边界防御已经无法满足日益复杂的内网办公环境&#xff0c;层出不穷的攻击手段已经让市场单一的防御手段黔驴技穷。当企业面临越来越复杂的网络威胁和数据泄密风险时&#xff0c;更需要一种综合的…

YOLOv8目标跟踪代码BaseTrack中关于类属性的用法

YOLOv8目标跟踪代码BaseTrack中关于类属性的用法 flyfish 源码是 class BaseTrack:_count 0def __init__(self):"""Initializes a new track with unique ID and foundational tracking attributes."""self.track_id 0self.is_activated F…

多组学双疾病串扰怎么做?PAN-AD九个机器学习+MR+单细胞,工作量不少

说在前面 “串扰”这个名词听起来高级了一个level&#xff0c;其实就是MR-通路的双疾病联合分析。虽然是筛选标志物的思路&#xff0c;但是工作量不小&#xff0c;作者还收集了13个不同AD自身免疫疾病数据集用于验证自己的机器学习模型&#xff0c;分析就是一些常规的WGCNA、P…

SpringBoot集成logback初始化源码解析(部分)

一.SpringBoot配置扩展点 SpringBoot日志模块使用监听的方式进行初始化&#xff0c;在SpringBoot项目启动后&#xff0c;会通知日志监听器 在日志监听器中ApplicationStartingEvent事件用来确定到底使用哪个日志系统&#xff0c;logback log4j等 在日志监听器中ApplicationEn…

PTA - 编写函数计算薪资

某公司销售员底薪为5000&#xff0c;销售业绩与利润提成的关系如下表所示&#xff08;计量单位&#xff1a;元&#xff09; 编写函数&#xff0c;计算员工月薪。 函数接口定义&#xff1a; salary(sales) 其中 参数 sales表示员工的月销售业绩。 裁判测试程序样例&#xff…

管理咨询公司的五个招聘秘密

在管理咨询中&#xff0c;人是业务&#xff1b;客户支付数百万美元&#xff0c;要求管理顾问确认问题&#xff0c;并推荐解决方案。由于收入和合规性受到威胁&#xff0c;招聘错误的成本可能非常昂贵&#xff0c;一些公司更倾向于谨慎而不是效率。然而&#xff0c;在当今竞争激…