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

aes加密解密

时间:2024-04-29 18:44:26浏览次数:20  
标签:aes 加密 String AES aesKey 解密 static new public

package com.hcp.utils.config;

import org.apache.commons.codec.digest.DigestUtils;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;

    /**
     * AES 加密工具类
     */
public class AesUtil {
    // 加密算法RSA
    public static final String KEY_ALGORITHM = "AES";
    //编码方式
    public static final String CODE_TYPE = "UTF-8";
    //填充类型 AES/ECB/PKCS5Padding   AES/ECB/ISO10126Padding
    public static final String AES_TYPE = "AES/ECB/PKCS5Padding";

//    String aesKey = "Sxygsj!2q";

    /**
     * 自定义内容加盐,生成AES秘钥
     */
    public static String generateAESKey(){
        return DigestUtils.md5Hex(getSalt(6)).substring(8, 24);
    }

    /**
     * 随机生成加盐类
     */
    public static String getSalt(int n){
        char[] chars = ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()_+").toCharArray();
        StringBuilder stringBuilder = new StringBuilder();
        SecureRandom random = new SecureRandom();
        for(int i = 0; i < n; i++){
            stringBuilder.append(chars[random.nextInt(chars.length)]);
        }
        return stringBuilder.toString();
    }

    /**
     * 加密
     * @param clearText 明文
     * @param aesKey AES秘钥
     * @return 加密串
     */
    public static String encryptAes(String clearText, String aesKey) {
        try {
            SecretKeySpec key = new SecretKeySpec(aesKey.getBytes(), KEY_ALGORITHM);
            Cipher cipher = Cipher.getInstance(AES_TYPE);
            cipher.init(Cipher.ENCRYPT_MODE, key);
            byte[] encryptedData = cipher.doFinal(clearText.getBytes(CODE_TYPE));
            return new BASE64Encoder().encode(encryptedData);
        } catch (Exception e) {
            throw new RuntimeException("加密失败", e);
        }
    }

    /**
     * 解密
     * @param encryptText 密文
     * @param aesKey AES秘钥
     * @return 解密串
     */
    public static String decryptAes(String encryptText, String aesKey) {
        try {
            byte[] byteMi = new BASE64Decoder().decodeBuffer(encryptText);
            SecretKeySpec key = new SecretKeySpec(aesKey.getBytes(), KEY_ALGORITHM);
            Cipher cipher = Cipher.getInstance(AES_TYPE);
            cipher.init(Cipher.DECRYPT_MODE, key);
            byte[] decryptedData = cipher.doFinal(byteMi);
            return new String(decryptedData, CODE_TYPE);
        } catch (Exception e) {
            throw new RuntimeException("解密失败", e);
        }
    }

    public static void main(String[] args) {
        String aesKey = generateAESKey();
        String json = "123456";
        System.out.println("字符串:" + json);
        String encrypt = encryptAes(json, aesKey);
        System.out.println("加密后字符串:" + encrypt);
        System.out.println("解密后字符串:" + decryptAes(encrypt, aesKey));
    }

}

 

标签:aes,加密,String,AES,aesKey,解密,static,new,public
From: https://www.cnblogs.com/-llf/p/18166489

相关文章

  • rsa加密解密
    packagecom.hcp.config.rsa;importorg.bouncycastle.util.encoders.Base64;importjavax.crypto.Cipher;importjava.security.*;publicclassRsaUtil{/***公钥*/privatestaticPublicKeypublicKey;/***私钥*/private......
  • 零知识证明与同态加密:隐私计算的双剑
    PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。在数字时代,隐私保护已成为全球关注的焦点。隐私计算作为解决数据隐私问题的关键技术,其核心目标是在不泄露个人或敏感信息的前提下,实现数据的计......
  • 如何批量进行U盘加密?U盘加密的方法有哪些?
    批量进行U盘加密,可以使用专业的U盘批量加密工具,例如U盘内存卡批量只读加密专家。这种工具支持同时连接多个U盘进行加密,操作简便,加密速度快。在加密过程中,可以根据需要选择保护类型,如常规、隐藏等,以满足不同设备上的使用需求。U盘加密的方法主要有以下几种:使用计算机系统自带的加......
  • js逆向实战之企名片返回数据解密
    url:https://www.qimingpian.com/finosda/project/pinvestment分析过程抓流量包,发现回显数据都是加密的。想要找到解密逻辑,可以参考上一篇文章的思路,直接搜索拦截器。有五处,只需要看响应拦截器即可。第一处响应拦截器可以看到e.data,有经验的人大概就可以判断出来......
  • UE如何存储PAK文件的AES密码
    IntroUE的大部分content资产都放在了.PAK文件中,为了避免资产被破解,最好对文件进行加密。由于pak文件在运行时需要解密,所以运行时必然需要知道明文密码。或许是出于效率考虑,Unreal使用的是AES这种对称加密,也就是加密和解密使用的是相同的key。如果把密码以明文的形式存储在文件系......
  • 基于混沌序列的图像加解密算法matlab仿真,并输出加解密之后的直方图
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述3.1混沌系统特性       混沌系统是一类具有确定性、非线性、初值敏感性、遍历性和伪随机性等特性的动力学系统。其主要特性包括: 确定性:混沌系统由一组确定性微分方程或差分方程描述......
  • js逆向实战之中国男子篮球职业联赛官方网站返回数据解密
    url:https://www.cbaleague.com/data/#/teamMain?teamId=29124分析过程看流量包,返回数据全是加密的字符串,要做的就是解密回显数据。由于这里的网址都比较特殊,里面都带有id号,所以通过url关键字去搜索不是一个很好的办法。看initiators,里面有很多异步传输。异步传输......
  • WIFI加密方式对无线速率的影响
    目录无线加密三种选择:WEP、WPA和WPA2测试平台和测试方法非加密和WEP加密测试结果差别巨大非加密条件下300M无线路由实测WEP加密条件下300M无线路由实测TKIP加密算法:WPA与WPA2成绩低迷WPA加密(TKIP加密算法)条件下300M无线路由实测WPA2加密(TKIP加密算法)条件下300M无线路由实测AE......
  • 陈畅亮搞的专利在Windows上利用加解密DLL模块对数据库连接字符串进行加解密
    陈畅亮搞的专利在Windows上利用加解密DLL模块对数据库连接字符串进行加解密  这种专利权人是公司,个人是发明人,专利年费是申请人先垫付,然后公司报销了,这个专利本身就不属于员工的这个是公司是专利权人, 使用权是公司,如果想要维持权利的话,需要缴纳年费,专利发明现在一个市......
  • 有关FTP服务器搭建于FTP加密技术的学习笔记
    FTP文件传输协议本篇是学习笔记,只整理相关链接,诚挚感谢各文章的博主。本文章不定期拓展内容。一、有关FTP的基本概念(一)、什么是FTP什么是FTPFTP的优势(二)、FTP扩展安全协议《FTP,SFTP,FTPS,SSL,TSL简介,区别,联系,使用场景说明》二、服务器搭建与客户端使用(......