ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

hutool工具的aes加密算法封装

2022-10-11 14:50:55  阅读:270  来源: 互联网

标签:aes加密


1. hutool工具封装aes加密

1.1. 需求

给一个字符串,使用aes加密后得到一个字符串,保存到数据库中,需要使用时,再解密使用

  1. 每次解密都重新生成一个秘钥,该如何实现?
  2. 整个系统只使用一个秘钥又该如何实现?

1.2. 源码

1.2.1. Key接口

包java.security 下的Key接口

public interface Key extends java.io.Serializable {
          
   
    /**
     * 返回此密钥的标准算法名称。 例如,“DSA”表示该密钥是 DSA 密钥
     */
    public String getAlgorithm();

    /**
     * 返回此Key的主要编码格式的名称,如果此Key不支持编码,则返回 null。
     *
     * @return
     */
    public String getFormat();

    /**
     * 以主要编码格式返回Key,如果此Key不支持编码,则返回 null
     *
     * @return
     */
    public byte[] getEncoded();
}

对称加密

AES简介

/**
 * AES加密算法实现<br>
 * 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法<br>
 * 对于Java中AES的默认模式是:AES/ECB/PKCS5Padding,如果使用CryptoJS,请调整为:padding: CryptoJS.pad.Pkcs7
 * 
 * @author Looly
 * @since 3.0.8
 */
public class AES extends SymmetricCrypto{
          
   }

得到AES对象

/**
    * AES加密<br>
    * 例:
    * 
    * <pre>
    * AES加密:aes(key).encrypt(data)
    * AES解密:aes(key).decrypt(data)
    * </pre>
    * 
    * @param key 密钥
    * @return {@link SymmetricCrypto}
    */
    public static AES aes(byte[] key) {
          
   
        return new AES(key);
    }

encrypt

/**
        * 加密,使用UTF-8编码
        * 
        * @param data 被加密的字符串
        * @return 加密后的bytes
        */
    public byte[] encrypt(String data) {
          
   
        return encrypt(StrUtil.bytes(data, CharsetUtil.CHARSET_UTF_8));
    }

encryptHex

/**
        * 加密,使用UTF-8编码
        * 
        * @param data 被加密的字符串
        * @return 加密后的Hex
        */
    public String encryptHex(String data) {
          
   
        return HexUtil.encodeHexStr(encrypt(data));
    }

decryptStr

/**
        * 解密Hex表示的字符串,默认UTF-8编码
        * 
        * @param data 被解密的String
        * @return 解密后的String
        */
    public String decryptStr(String data) {
          
   
        return decryptStr(data, CharsetUtil.CHARSET_UTF_8);
    }

1.3. 代码

public class AESUtils {
          
   

    /**
     * base64格式的默认秘钥
     * 也可以每次生成一个随机的秘钥,使用如下代码
     * byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
     * String secret = Base64.encode(key);
     */
    private static final String BASE64_SECRET = "aEsva0zDHECg47P8SuPzmw==";

    /**
     * aes用来加密解密的byte[]
     */
    private final static byte[] SECRET_BYTES = Base64.decode(BASE64_SECRET);

    /**
     * 根据这个秘钥得到一个aes对象
     */
    private final static  AES aes = SecureUtil.aes(SECRET_BYTES);

    /**
     * 使用aes加密
     * @param content
     * @return
     */
    public static String AESEnCode(String content){
          
   
        //加密完以后是十六进制的
        return aes.encryptHex(content);
    }

    /**
     * 使用aes算法,进行解密
     * @param ciphertext
     * @return
     */
    public static String AESDeCode(String ciphertext){
          
   
        return  aes.decryptStr(ciphertext);
    }

    public static void main(String[] args) {
          
   
        String string = "hello world";
        String enCode = AESEnCode(string);
        String dnCode = AESDeCode(enCode);
    }
}

标签:aes加密
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有