首页/新闻资讯/正文详情

Java 使用Aes 加解密 和 RSA 加解密

发布时间:2026/9/23 19:42:23 来源:云帆数科 栏目:资讯中心
Java 使用Aes 加解密 和 RSA 加解密
工具类引入dependencies!-- Hutool 工具库 --dependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion5.8.22/version/dependency/dependenciesAES 加解密代码packagecom.mt.visit.util;importcn.hutool.crypto.Mode;importcn.hutool.crypto.Padding;importcn.hutool.crypto.SecureUtil;importcn.hutool.crypto.symmetric.AES;importjava.nio.charset.StandardCharsets;publicclassAesUtil3RuiWeiJpg{publicfinalstaticStringaesKeyHtestNp1236540;/** * AES解密方法 - 使用ECB模式和PKCS5Padding填充 * * param encrypt 加密后的十六进制字符串 * return 解密后的明文字符串 */publicstaticStringdecryptStr(Stringencrypt){// 参数校验if(encryptnull||encrypt.isEmpty()){returnencrypt;}//第一种方式默认使用CBC方式安全性更高/* AES aes SecureUtil.aes(aesKey.getBytes()); AES aes new AES(Mode.CBC, Padding.PKCS5Padding, aesKey.getBytes()); 这两种写法效果一样*///String decrypt aes.decryptStr(encrypt);// 创建AES解密器使用ECB模式和PKCS5Padding填充AESaesnewAES(Mode.ECB,Padding.PKCS5Padding,aesKey.getBytes(StandardCharsets.UTF_8));// 执行解密操作Stringdecryptaes.decryptStr(encrypt);returndecrypt;}/** * AES加密方法 - 使用ECB模式和PKCS5Padding填充 * * param decrypt 明文字符串 * return 加密后的十六进制字符串 */publicstaticStringencryptStr(Stringdecrypt){// 参数校验if(decryptnull||decrypt.isEmpty()){returndecrypt;}//第一种方式默认使用CBC方式安全性更高/* AES aes SecureUtil.aes(aesKey.getBytes()); AES aes new AES(Mode.CBC, Padding.PKCS5Padding, aesKey.getBytes()); 这两种写法效果一样*///String encrypt aes.encryptHex(decrypt);// 创建AES加密器使用ECB模式和PKCS5Padding填充AESaesnewAES(Mode.ECB,Padding.PKCS5Padding,aesKey.getBytes(StandardCharsets.UTF_8));// 执行加密操作返回十六进制字符串Stringencryptaes.encryptHex(decrypt);returnencrypt;}publicstaticvoidmain(String[]args){System.out.println(encryptStr(330106197107290418));System.out.println(encryptStr(330106197107290417));System.out.println(decryptStr(668B25C1A45B21612AE07BE44FA297B7));}}加密模式对比表推荐顺序1、GCM模式 - 提供加密和认证性能好2、CTR模式 - 支持并行处理错误不传播3、CBC模式 - 经典选择安全性高4、CFB/OFB模式 - 特殊场景使用5、ECB模式 - 仅在特殊需求下使用如与旧系统兼容RSA 加解密 (一般用于和web端交互)密钥对生成http://web.chacuo.net/netrsakeypairimportjavax.crypto.Cipher;importjava.security.*;importjava.security.spec.PKCS8EncodedKeySpec;importjava.security.spec.X509EncodedKeySpec;importjava.util.Base64;publicclassRSAUtil{privatestaticfinalStringPUBLIC_KEYMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALKZDzv6s78uQ9C7fXLZzIaZhSlVm0/Nb7hZYZyDOnIiJFpFYkpv2nMPi3G3B1ZXCLkQIKqcnEnwslFq/nTct/sCA0CAwEAAQ;// 替换为你的公钥privatestaticfinalStringPRIVATE_KEYMIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY7NtPrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKNPuH3owIDAQABAkAfoiLyLZ4lf4Myxk6xUDgLaWGximj20CUf5BKKnlrKEd8gAkM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWowcSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21vF25WaHYPxCFMvwxpcw99EcvDQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthhYhovyloRYsMIS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3UP8iWi1Qw0Y;// 替换为你的私钥/** * 使用公钥加密数据 * * param data 待加密的数据 * return 加密后的Base64编码字符串 */publicstaticStringencrypt(Stringdata){try{// 1. 获取公钥对象byte[]decodedKeyBase64.getDecoder().decode(PUBLIC_KEY);X509EncodedKeySpeckeySpecnewX509EncodedKeySpec(decodedKey);KeyFactorykeyFactoryKeyFactory.getInstance(RSA);PublicKeypublicKeykeyFactory.generatePublic(keySpec);// 2. 初始化 Cipher 用于加密CiphercipherCipher.getInstance(RSA/ECB/PKCS1Padding);cipher.init(Cipher.ENCRYPT_MODE,publicKey);// 3. 执行加密操作byte[]encryptedBytescipher.doFinal(data.getBytes(UTF-8));// 4. 将结果转换为Base64编码字符串returnBase64.getEncoder().encodeToString(encryptedBytes);}catch(Exceptione){e.printStackTrace();returnnull;}}/** * 使用私钥解密数据 * * param encryptedData 已加密的Base64编码字符串 * return 解密后的原始数据 */publicstaticStringdecrypt(StringencryptedData){try{// 1. 获取私钥对象byte[]decodedKeyBase64.getDecoder().decode(PRIVATE_KEY);PKCS8EncodedKeySpeckeySpecnewPKCS8EncodedKeySpec(decodedKey);KeyFactorykeyFactoryKeyFactory.getInstance(RSA);PrivateKeyprivateKeykeyFactory.generatePrivate(keySpec);// 2. 初始化 Cipher 用于解密CiphercipherCipher.getInstance(RSA/ECB/PKCS1Padding);cipher.init(Cipher.DECRYPT_MODE,privateKey);// 3. 解密byte[]encryptedBytesBase64.getDecoder().decode(encryptedData);byte[]decryptedBytescipher.doFinal(encryptedBytes);// 4. 转换为字符串UTF-8returnnewString(decryptedBytes,UTF-8);}catch(Exceptione){e.printStackTrace();returnnull;}}// 测试方法publicstaticvoidmain(String[]args){StringoriginalDataHello, this is a test message!;System.out.println(Original Data: originalData);// 加密StringencryptedDataencrypt(originalData);System.out.println(Encrypted Data: encryptedData);// 解密StringdecryptedDatadecrypt(encryptedData);System.out.println(Decrypted Data: decryptedData);}}

相关推荐

python的智能制造导论工业场景模拟第八十六篇:使用matplotlib绘制不同产线OEE对比条形图,直观展示各产线综合效率差异。
python的智能制造导论工业场景模拟第八十六篇:使用matplotlib绘制不同产线OEE对比条形图,直观展示各产线综合效率差异。

用Matplotlib画一张图,让厂长秒懂哪条产线在“拖后腿”周五下午的生产经营例会,厂长把一叠报表摔在会议桌上。“这个月又是没达标。”厂长环视一圈,“各产线的OEE数据都在这里,谁能告诉我,到底哪条线拉了后腿&#xff… · 2026/9/23 19:42:23

亚信邮箱源码图解原理:3步搞定StackTrace报错
亚信邮箱源码图解原理:3步搞定StackTrace报错

亚信邮箱源码图解原理:3步搞定StackTrace报错 刚入职第一天,导师甩给我一个任务:接入亚信邮箱系统,发送测试邮件。我信心满满打开代码,结果控制台直接炸出一屏红字。 java.lang.RuntimeException… · 2026/9/23 19:42:15

2026最新红男绿女txt实操指南 告别环境配置卡顿
2026最新红男绿女txt实操指南 告别环境配置卡顿

2026最新红男绿女txt实操指南 告别环境配置卡顿 配置环境就卡半天,是不是你的常态?别急,这通常是依赖版本冲突或权限缺失导致的。2026最新的技术栈要求更严格的兼容性,很多旧教程里的 pip install… · 2026/9/23 19:42:15

SAP FICO自动付款配置与F110执行全流程:从FBZP到底表存储
SAP FICO自动付款配置与F110执行全流程:从FBZP到底表存储

简介:本资源面向SAP FICO顾问、财务信息化实施人员及需要掌握自动付款功能的运维学习者,围绕F110自动付款的配置、测试与底表存储展开,帮助解决银行主数据维护、收付程序设置及付款建议生成等实操问题。压缩包内共1个docx文档,约1… · 2026/9/23 20:17:17

Stylus 插值(Interpolation)完全指南:从属性名到选择器的动态构建
Stylus 插值(Interpolation)完全指南:从属性名到选择器的动态构建

Stylus 插值(Interpolation)完全指南:从属性名到选择器的动态构建 【免费下载链接】stylus Expressive, robust, feature-rich CSS language built for nodejs 项目地址: https://gitcode.com/gh_mirrors/st/stylus 插值(I… · 2026/9/23 20:17:11

LSTM股价预测实战:从数据预处理到交易信号落地
LSTM股价预测实战:从数据预处理到交易信号落地

简介:本资源是一套面向深度学习初学者与金融量化实践者的LSTM股价预测可执行代码包,聚焦时间序列建模核心能力训练,解决传统RNN在长期依赖任务中梯度消失导致预测失效的痛点。压缩包共153个文件,含89个Python脚本(涵盖… · 2026/9/23 20:17:11

低代码避坑指南:3个致命错误导致性能优化失效
低代码避坑指南:3个致命错误导致性能优化失效

低代码避坑指南:3个致命错误导致性能优化失效 刚把同事发来的低代码平台部署包拷进生产环境,点了一下“运行”,界面直接白屏,控制台报错 TypeError: Cannot read properties of undefined… · 2026/9/23 20:17:04

苹果操作系统底层原理深度解析与开发完整示例
苹果操作系统底层原理深度解析与开发完整示例

苹果操作系统底层原理深度解析与开发完整示例 面试被问苹果操作系统原理答不上来?别慌,很多人卡在底层机制上。今天拆解核心逻辑,附完整示例,帮你彻底搞懂。 一句话原理:混合内核与分层架构… · 2026/9/23 20:16:58

2026最新梦间集入门:应届生全栈避坑指南
2026最新梦间集入门:应届生全栈避坑指南

2026最新梦间集入门:应届生全栈避坑指南 刚写完Hello World,是不是脑子一片空白?学会语法却不知怎么搭项目,这简直是无数应届生转码时的至暗时刻。别慌,这种“断片感”我太熟悉了,今天这篇 2026最新… · 2026/9/23 20:16:58

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码