AES加密和解密,key需要32位
AES加密和解密,key需要32位
package com.example.core.mydemo.sign; import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec; /**
* 加密后字符串为str:XDUWkZ088cmXUGohYxGZ3g==
* 解密后字符串为str2:hello world
*/
public class AesEncryptTestUtils { private static Logger logger = LoggerFactory.getLogger(AesEncryptTestUtils.class);
private static final String AES_ALG = "AES";
/**
* AES算法
*/
private static final String AES_CBC_PCK_ALG = "AES/ECB/PKCS5Padding"; public static final String CHARSET_UTF8 = "UTF-8"; /**
* AES加密
*
* @param srcContent
* @return
* @throws Exception
*/
public static String aesEncryptContent(String srcContent,String AES_KEY) {
try{
//如果为空不加密
if(StringUtils.isEmpty(srcContent)){
return srcContent;
}
String aesStr = aesEncrypt(srcContent,AES_KEY,CHARSET_UTF8);
return aesStr;
}catch (Exception e){
logger.error("AES加密失败,srcContent为{}",srcContent);
throw new RuntimeException("AES加密失败");
}
} /**
* AES解密
*
* @param aesContent
* @return
* @throws Exception
*/
public static String aesDecryptContent(String aesContent,String AES_KEY){
String srcStr = "";
try{
//如果为空不加密
if(StringUtils.isEmpty(aesContent)){
return aesContent;
}
srcStr = aesDecrypt(aesContent,AES_KEY,CHARSET_UTF8);
}catch (Exception e){
logger.error("AES解密失败,aesContent为{}",aesContent);
}
return srcStr;
} /**
* AES加密
*
* @param content
* @param aesKey
* @param charset
* @return
*/
private static String aesEncrypt(String content, String aesKey, String charset)
throws Exception {
Cipher cipher = Cipher.getInstance(AES_CBC_PCK_ALG);
cipher.init(Cipher.ENCRYPT_MODE,
new SecretKeySpec(aesKey.getBytes(), AES_ALG)); byte[] encryptBytes = cipher.doFinal(content.getBytes(charset));
return new String(Base64.encodeBase64(encryptBytes));
} /**
* AES解密
*
* @param content
* @param key
* @param charset
* @return
*/
private static String aesDecrypt(String content, String key, String charset)
throws Exception {
Cipher cipher = Cipher.getInstance(AES_CBC_PCK_ALG);
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes(),
AES_ALG)); byte[] cleanBytes = cipher.doFinal(Base64.decodeBase64(content.getBytes()));
return new String(cleanBytes, charset);
} public static void main(String[] args) throws Exception{
try {
//key需要32位
String key = "1234567890tkltktqVdTstvuhlZHTest";
String str = aesEncryptContent("hello world", key);
System.out.println("加密后字符串为str:"+str); String str2 = aesDecryptContent(str, key);
System.out.println("解密后字符串为str2:"+str2); } catch (Exception e) {
e.printStackTrace();
}
} }
AES加密和解密,key需要32位的更多相关文章
- java与C#、.NET AES加密、解密 解决方案
1.情景展示 Java提供的密钥,C#无法解密. 2.原因分析 在Java中,AES的实际密钥需要用到KeyGenerator 和 SecureRandom,但是C#和.NET 里面没有这2个类, ...
- java AES加密、解密(兼容windows和linux)
java AES加密.解密 CreationTime--2018年7月14日10点06分 Author:Marydon 1.准备工作 updateTime--2018年8月10日15点28分 up ...
- 通过Go实现AES加密和解密工具
本文包含如下两个内容: AES加密介绍及实现原理 Go实现AES加密和解密工具 AES加密介绍及实现原理 AES( advanced encryption standard)使用相同密钥进行加密和解密 ...
- 探讨数据进行AES加密和解密以及.NET Core对加密和解密为我们提供了什么?
前言 对于数据加密和解密每次我都是从网上拷贝一份,无需有太多了解,由于在.net core中对加密和解密目前全部是统一了接口,只是做具体的实现,由于遇到过问题,所以将打算基本了解下其原理,知其然足矣, ...
- 探讨.NET Core中实现AES加密和解密以及.NET Core为我们提供了什么方便!
前言 对于数据加密和解密每次我都是从网上拷贝一份,无需有太多了解,由于在.net core中对加密和解密目前全部是统一了接口,只是做具体的实现,由于遇到过问题,所以将打算基本了解下其原理,知其然足矣, ...
- Oracle的AES加密与解密用法
Oracle的AES加密与解密用法2013年12月11日 11:50:35 iteye_751 阅读数:428--加密字符串create or replace function des3_enc( i ...
- java独立小程序实现AES加密和解密
一.需求: web项目中配置文件配置的密码是明文的, 现在需要修改成密文, 加密方式采用AES, 于是写了个工具类用于加密和解密. 又因为这个密码是由客户来最终确定, 所以为了部署时方便起见, 写了个 ...
- AES加密、解密工具类
AES加密.解密工具类代码如下: package com.util; import java.io.IOException; import java.io.UnsupportedEncodingExc ...
- php的AES加密、解密类
<?php /** * php.ios.Android 通用的AES加密.解密方法 */ namespace Common\Business; class AESCrypt { /** * 初始 ...
- polarssl rsa & aes 加密与解密
上周折腾加密与解密,用了openssl, crypto++, polarssl, cyassl, 说起真的让人很沮丧,只有openssl & polarssl两个库的RSA & AES ...
随机推荐
- CPU静默数据错误:存储系统数据不丢不错的设计思考
简介: 对于数据存储系统来说,保障数据不丢不错是底线,也是数据存储系统最难的部分.据统计,丢失数据中心10天的企业,93%会在1年内破产.那么如果想要做到数据不丢不错,我们可以采取怎样的措施呢? 作者 ...
- [FAQ] edge 等浏览器的 debug 栏的 "网络" 中看不到网络请求
如果 edge 等浏览器的 debug 栏的 "网络" 中看不到网络请求, 出现这类情况一般是在 debug 栏的 "设置" 中进行了过滤,可能是不小心点了 ...
- [MongoDB] Mongo 表字段添加索引, 查看索引, 删除索引
查看索引: db.getCollection('xx').getIndexes(); 创建索引: # 1 代表升序,-1代表降序,name 指定索引名 db.getCollection('xx').c ...
- STM32【HAL库】使用外部SRAM程序
#include <board.h> #ifdef BSP_USING_SRAM #include <drv_common.h> #include <rtthread.h ...
- 网络协议分析与抓包 TCP/IP UDP等
学习地址: https://www.bilibili.com/video/BV1hV411U74y?p=4 https://www.bilibili.com/video/BV1S7411R7kF?p= ...
- Go-Zero自定义goctl实战:定制化模板,加速你的微服务开发效率(四)
前言 上一篇文章带你实现了Go-Zero和goctl:解锁微服务开发的神器,快速上手指南,本文将继续深入探讨Go-Zero的强大之处,并介绍如何使用goctl工具实现模板定制化,并根据实际项目业务需求 ...
- node.js环境在Window和Mac中配置,以及安装cnpm和配置Less环境
Node.js 和cnpm安装 最近准备学习vue.js,但首先需要配置电脑的环境.配置node.js. 1.在node(https://nodejs.org/en/)官网上下载安装node.js,两 ...
- StarCoder2-Instruct: 完全透明和可自我对齐的代码生成
指令微调 是一种技术,它能让大语言模型 (LLMs) 更好地理解和遵循人类的指令.但是,在编程任务中,大多数模型的微调都是基于人类编写的指令 (这需要很高的成本) 或者是由大型专有 LLMs 生成的指 ...
- ts小知识
在引入enum枚举的时候不需要加type import type {a} from 'b'
- SDXL
SDXL 模型经过训练可以创建具有更好图像质量的更大图像.它们还可以拍摄 512x512 分辨率的优质图像,因此就图像质量而言,它们通常是 SD 1 或 2 型号的良好替代品. 但是,它们确实会消耗更 ...