Java教程

hutool工具的aes加密算法封装

本文主要是介绍hutool工具的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);
    }
}
这篇关于hutool工具的aes加密算法封装的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!