首页 > 其他分享 >AES加密和解密,key需要32位

AES加密和解密,key需要32位

时间:2023-06-30 18:56:06浏览次数:37  
标签:AES return String 32 static key 加密

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,return,String,32,static,key,加密
From: https://www.cnblogs.com/oktokeep/p/17517629.html

相关文章

  • 一个基于STM32H743芯片和SOEM协议栈的EtherCAT主站源码。该源码提供了配套的CUBE工程,
    一个基于STM32H743芯片和SOEM协议栈的EtherCAT主站源码。该源码提供了配套的CUBE工程,使用的是SOEM协议栈的1.3.1版本。此外,还可以使用NUCLEO-H743ZI开发板进行配套开发。该系统支持DC同步,并且可以与多种驱动器型号配合使用,包括汇川IS620N、三洋RS3、赛孚德ASD620B、埃斯顿ProNet、......
  • 微信开发中你不知道的事~openid、unionid、session_key
    先了解基本概念~openid:微信公众平台对用户的唯一标识unionid:同一个微信开放平台下的用户唯一标识session_key:会话密钥一.openid可理解成1个微信用户打开1个微信公众号大门的唯一的1把钥匙同一组织(企业)注册的不同类型公众平台,被看作是多个不同的账号所以,当小明同......
  • 【雕爷学编程】Arduino动手做(140)---MAX3232串口转换板
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • C# WinForm开发,使用dnSpy-net-win32调试dll文件或.exe文件工具
     工具下载:https://download.csdn.net/download/haojuntu/87967457打开文件,加载需要调试文件 视图-》窗口-》模块断点,可以调试具体模块 找到要调试的模块,启动项目后,类似vs开发,可以一步步调试 ......
  • 【Azure 存储服务】记一次调用Storage Blob API使用 SharedKey Authorization出现的40
    问题描述使用AzureStoragBlobRESTAPI上传文件,用SharedKey作为Authorization出现403错误。错误消息b'\xef\xbb\xbf<?xmlversion="1.0"encoding="utf-8"?><Error><Code>AuthenticationFailed</Code><Message>Serverfailedtoau......
  • 2023-06-29:redis中什么是热点Key?该如何解决?
    2023-06-29:redis中什么是热点Key?该如何解决?答案2023-06-29:在Redis中,经常被访问的key被称为热点key。产生原因和危害原因热点key问题产生的原因可以归纳为以下两种情况:用户对于某些数据的访问频率远大于数据的生产频率,这类数据包括热门商品、热点新闻、热点评论以及明星直播等。在日......
  • CH32--用芯片的UID给固件加密
         本文主要介绍怎么利用UID进行固件加密! 一,CH32系列每个芯片都有唯一的身份标识:      二,读取方式:以8/16/32位进行读访问下面地址都是可以的 三,利用UID加密所谓:"道高一尺魔高一丈",只有不断的更新加密技术以增加解密成本或许在一定程度上能够遏制......
  • 【SpringBoot】redis keys命令被禁用,spring缓存 @CacheEvict报异常
     背景项目使用springboot整合redis做缓存,代码中使用spring的缓存注解配置缓存策略。在jarvis上部署时接入了公司分布式redis平台代替本地的redis。结果测试的时候,新增一条记录时报了错,提示  ERRunknowncommand'keys' 。经排查发现问题原因:新增记录的函数上有@C......
  • 第二阶段知识点总结【day32-day35】
    第二阶段知识点总结day321.面向过程和面向对象优缺点,使用场景2.如何定义类,写出一个例子,定义类的过程发生了那些事,如何产生对象,产生的对象有何特点3.如何定制对象自己的属性4.属性的查找顺序是怎样的day331.分别写出一个绑定方法,非绑定方法的例子2.如何隐藏属性,写一个例子,......
  • 第二阶段知识点总结解释版【day32-day35】
    知识点总结day321.面向过程和面向对象优缺点,使用场景面向过程和面向对象都是编程的两种不同的范式。面向过程的优点:1.执行速度比面向对象更快。2.简单易懂,且不需要大量的规则或语法。3.它适合在小型程序中使用。面向过程的缺点:1.没有高度的拓展性。2.系统难以......