首页 > 其他分享 >AES加解密

AES加解密

时间:2023-04-21 19:44:50浏览次数:38  
标签:AES return String 加解密 content static byte

AES加解密

 https://www.cnblogs.com/SjhCode/p/AES.html

AES加解密工具类

 

 
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Objects;

/**
 * @author 
 * @date 2022/8/31 15:53
 * @description TODO AES 加解密
 */
public class AESUtil {
    private final static String KEY = "smkldospdosldaaa"; // key:必须16个字符,且要和前端保持一致
    private final static String IV = "1016449182158477";  // 偏移量:必须16个字符,且要和前端保持一致

    /**
     * 加密返回的数据转换成 String 类型
     *
     * @param content 明文
     */
    public static String encrypt(String content) {
        return parseByte2HexStr(Objects.requireNonNull(aesCbcEncrypt(content.getBytes(), KEY.getBytes(), IV.getBytes())));
    }

    /**
     * 将解密返回的数据转换成 String 类型
     *
     * @param content Base64编码的密文
     */
    public static String decrypt(String content) {
        return new String(Objects.requireNonNull(aesCbcDecrypt(parseHexStr2Byte(content), KEY.getBytes(), IV.getBytes())));
    }

    private static byte[] aesCbcEncrypt(byte[] content, byte[] keyBytes, byte[] iv) {
        try {
            SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");
            //设置模式,编码,后端为PKCS5Padding,对应前端是Pkcs7
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(iv));
            return cipher.doFinal(content);
        } catch (Exception e) {
            System.out.println("exception:" + e);
        }
        return null;
    }

    private static byte[] aesCbcDecrypt(byte[] content, byte[] keyBytes, byte[] iv) {
        try {
            SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv));
            return cipher.doFinal(content);
        } catch (Exception e) {
            System.out.println("exception:" + e);
        }
        return null;
    }

    /**
     * 将byte数组转换成16进制String
     */
    public static String parseByte2HexStr(byte[] buf) {
        StringBuilder sb = new StringBuilder();
        for (byte b : buf) {
            String hex = Integer.toHexString(b & 0xFF);
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            sb.append(hex.toUpperCase());
        }
        return sb.toString();
    }

    /**
     * 将16进制String转换为byte数组
     */
    public static byte[] parseHexStr2Byte(String hexStr) {
        if (hexStr.length() < 1) {
            return null;
        }
        byte[] result = new byte[hexStr.length() / 2];
        for (int i = 0; i < hexStr.length() / 2; i++) {
            int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
            int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
            result[i] = (byte) (high * 16 + low);
        }
        return result;
    }


}
 

AESRequest 实体类,用一个类来接收前端传过来的加密字符串

 
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class AESRequest {

    @ApiModelProperty(value = "加密后字符串", required = true)
    private String encrypt;
}
 

标签:AES,return,String,加解密,content,static,byte
From: https://www.cnblogs.com/chuangsi/p/17341539.html

相关文章

  • AES算法 前端JavaScript加密 后端Java解密
    CryptoJShttps://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js中文文档https://cryptojs.gitbook.io/docs/varAES=function(){ constuuid32="00010203-04050607-08090A0B-0C0D0E0F".toString();constparam=Array.from(uuid32......
  • 升级Java17后Maven中使用bouncycastle加解密遇到JCE cannot authenticate the provide
    网上找了很多办法,逐一试过之后,发现有效的方式为修改打包方式:<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version&......
  • vue加goframe使用AES加解密(记录)
    vue加goframe使用AES加解密首先,需要在前端使用Vue的crypto-js库来进行AES加解密,可以使用以下命令进行安装:npminstallcrypto-js然后在需要加解密的组件中引入该库:importCryptoJSfrom'crypto-js'对于加密,可以使用以下代码:constkey=CryptoJS.enc.Utf8.parse('1234567......
  • 29-springcloud-config-5-配置信息的加解密安全处理
    前面是在Git仓库中明文存储配置信息值,很多场景下,对于某些敏感的配置内容(例如数据库账号、密码等),应该加密存储,configserver为我们考虑到了这一点,对配置内容提供了加密与解密支持;安装JCEconfigserver的加解密功能依赖JavaCryptographyExtension(JCE)Java8JCE下载地址:http://......
  • Spring Boot 接口加解密,新姿势来了!
    1.介绍在我们日常的Java开发中,免不了和其他系统的业务交互,或者微服务之间的接口调用如果我们想保证数据传输的安全,对接口出参加密,入参解密。但是不想写重复代码,我们可以提供一个通用starter,提供通用加密解密功能2.前置知识2.1hutool-crypto加密解密工具hutool-crypto提供......
  • jsencrypt与sm-crypto对url加解密处理
    1.jsencrypt公钥私钥随便找个网站生成(https://www.bejson.com/enc/rsa/)1.安装包:npmijsencrypt--save2.封装函数import{JSEncrypt}from'jsencrypt';//加密msg为需要加密的字符串,返回加密后的字符串exportfunctionsetEncrypt(msg){constjsencrypt=newJS......
  • SM4Utils加解密demo
    SM4Utils加解密demopackagecom.example.core.mydemo.sm4;importcn.org.bjca.utils.SM4Utils;publicclassSM4Test{publicstaticvoidmain(String[]args){Stringkey="77rTb25789srfbhulsjwnv==";Stringiv="BPEpTshuwas......
  • JSON.parse意外失败的问题(传入内容在校验网站上检查无误)(传入内容来自CryptoJS.AES.dec
    背景:由CryptoJS.AES.decrypt解码来的数据并进行toString(CryptoJS.enc.Utf8)之后,无法使用JSON.parse转换成json数据,但是使用在线校验工具认为格式正确。可能是由于解码后的字符串包含了一些特殊字符或者不可见字符,导致JSON.parse方法无法正确解析字符串。可以尝试使用console.log......
  • AES算法
     (一)设计思路(可包含部分关键代码说明)  /*通过密钥计算规则计算余下数组         *         *1.如果i不是4的倍数,那么第i列由如下等式确定:         *W[i]=W[i-4]⨁W[i-1]         *2.如果i是4的倍数,那么第i列由如下等式确定:    ......
  • 基于FPGA的AES加密解密vivado仿真,verilog开发,包含testbench
    1.算法描述         AES,高级加密标准,是采用区块加密的一种标准,又称Rijndael加密法.严格上来讲,AES和Rijndael又不是完全一样,AES的区块长度固定为128比特,秘钥长度可以是128,192或者256.Rijndael加密法可以支持更大范围的区块和密钥长度,Rijndael使用的密......