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位的更多相关文章

  1. java与C#、.NET AES加密、解密 解决方案

      1.情景展示 Java提供的密钥,C#无法解密. 2.原因分析 在Java中,AES的实际密钥需要用到KeyGenerator 和 SecureRandom,但是C#和.NET 里面没有这2个类, ...

  2. java AES加密、解密(兼容windows和linux)

      java AES加密.解密 CreationTime--2018年7月14日10点06分 Author:Marydon 1.准备工作 updateTime--2018年8月10日15点28分 up ...

  3. 通过Go实现AES加密和解密工具

    本文包含如下两个内容: AES加密介绍及实现原理 Go实现AES加密和解密工具 AES加密介绍及实现原理 AES( advanced encryption standard)使用相同密钥进行加密和解密 ...

  4. 探讨数据进行AES加密和解密以及.NET Core对加密和解密为我们提供了什么?

    前言 对于数据加密和解密每次我都是从网上拷贝一份,无需有太多了解,由于在.net core中对加密和解密目前全部是统一了接口,只是做具体的实现,由于遇到过问题,所以将打算基本了解下其原理,知其然足矣, ...

  5. 探讨.NET Core中实现AES加密和解密以及.NET Core为我们提供了什么方便!

    前言 对于数据加密和解密每次我都是从网上拷贝一份,无需有太多了解,由于在.net core中对加密和解密目前全部是统一了接口,只是做具体的实现,由于遇到过问题,所以将打算基本了解下其原理,知其然足矣, ...

  6. Oracle的AES加密与解密用法

    Oracle的AES加密与解密用法2013年12月11日 11:50:35 iteye_751 阅读数:428--加密字符串create or replace function des3_enc( i ...

  7. java独立小程序实现AES加密和解密

    一.需求: web项目中配置文件配置的密码是明文的, 现在需要修改成密文, 加密方式采用AES, 于是写了个工具类用于加密和解密. 又因为这个密码是由客户来最终确定, 所以为了部署时方便起见, 写了个 ...

  8. AES加密、解密工具类

    AES加密.解密工具类代码如下: package com.util; import java.io.IOException; import java.io.UnsupportedEncodingExc ...

  9. php的AES加密、解密类

    <?php /** * php.ios.Android 通用的AES加密.解密方法 */ namespace Common\Business; class AESCrypt { /** * 初始 ...

  10. polarssl rsa & aes 加密与解密

    上周折腾加密与解密,用了openssl, crypto++, polarssl, cyassl, 说起真的让人很沮丧,只有openssl & polarssl两个库的RSA & AES ...

随机推荐

  1. Mysql带条件取多条随机记录

    有个文章段落表part,有两种类型的段落,即part_type取1或2,要从表中随机取多条任意类型的段落,比如3条. 方法一 ORDER BY后接RAND() select * from part w ...

  2. 11.IO 流

    1.IO 流引入 概述:以应用程序为参照物,读取数据为输入流(Input),写数据为输出流(Output),大量输入输出数据简称 IO 流 原理: 2.IO 流的分类 读写的文件分类 二进制文件:打开 ...

  3. iOS LLVM 中的宏定义

    在阅读 Objc 库源码时常常会遇到很多宏定义,比如宏 SUPPORT_INDEXED_ISA.SUPPORT_PACKED_ISA,代码如下所示: // Define SUPPORT_INDEXED ...

  4. jeecg-boot中分页接口用自定义sql和list实现

    1.controller中 @ApiOperation(value="分析仪工作状态和报警-3列-分页", notes="分析仪工作状态和报警状态-分页") @ ...

  5. spring-boot集成Quartz-job存储方式一JDBC

    1.项目jar包依赖引入 <dependency> <groupId>org.springframework.boot</groupId> <artifact ...

  6. leaflet 实现地图上标记的发散闪烁动画

    先看效果 js文件:blinkmarker.js L.blinkMarker = function (point, property) { // 使用js标签,便于操作,这个temDivEle的作用是 ...

  7. MySQL如何快速获取binlog的开始时间和结束时间

    之前写过一篇文章MySQL如何获取binlog的开始时间和结束时间[1],文章里面介绍了如何获取MySQL数据库二进制日志(binlog)的开始时间与结束时间的一些方法.实际应用当中,我们可能还会遇到 ...

  8. Splashtop 扩展了所有 Android 8.0 以上设备的远程控制功能

    好消息:Splashtop远程访问和远程支持软件现在支持100多个品牌的 Android 设备. 2020年9月15日,远程访问和远程支持解决方案的全球领导者 Splashtop Inc. 宣布:所有 ...

  9. Unity Shader中的常见流控制指令

    在Shader中处理流控制语句时,常加上一些宏去处理流控制指令.例如: [UNITY_UNROLL] for (int i = 0; i < 10; i++) { //do something. ...

  10. Linux环境下:程序的链接, 装载和库[可执行文件的装载]

    现代操作系统如何装载可执行文件? 给进程分配独立的虚拟地址空间 建立虚拟地址空间和可执行文件的映射关系 把CPU指令寄存器设置成可执行文件的入口地址,启动执行 可执行文件在装载的过程中实际上是映射的虚 ...