Hutool工具箱之Hutool-crypto加密解密
https://anome.csdn.net/6464567d77f0ca41cb3173c0.html?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Eactivity-1-127958443-blog-122781007.235%5Ev38%5Epc_relevant_anti_t3_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Eactivity-1-127958443-blog-122781007.235%5Ev38%5Epc_relevant_anti_t3_base&utm_relevant_index=2
https://blog.csdn.net/HLH_2021/article/details/122781007
https://blog.csdn.net/weixin_43194885/article/details/121270962
一、对称加密
1.1 Aes加解密
package com.kuxinming.util; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.RSA; import cn.hutool.crypto.symmetric.SymmetricAlgorithm; import cn.hutool.crypto.symmetric.SymmetricCrypto; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import sun.misc.BASE64Encoder; import java.security.KeyPair; import java.security.PrivateKey; import java.security.PublicKey; import java.util.HashMap; import java.util.Map; @Slf4j public class AesUtil { // 长度只能是16位,24位,32位 private static final String defaultKey = "1234567891011123"; public static String encryptBase64(String content,String key){ try{ byte[] byteKey = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue(), key.getBytes()).getEncoded(); SymmetricCrypto aes = SecureUtil.aes(byteKey); // 加密 return aes.encryptBase64(content); }catch (Exception e){ log.error(" 加密异常:{}",e.getMessage()); } return null; } public static String decryptStr(String encryptString,String key){ try{ byte[] byteKey = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue(), key.getBytes()).getEncoded(); SymmetricCrypto aes = SecureUtil.aes(byteKey); //解密 return aes.decryptStr(encryptString); }catch (Exception e){ log.error(" 解密异常:{}",e.getMessage()); } return null; } public static void main(String[] args) { // 16位自定义密码 String key = "1234567891011123"; String content = "明文"; String encryptStr = encryptBase64(content,key); System.out.println(decryptStr(encryptStr,key)); } }
二、不对称加密
2.1 Rsa加密
package com.kuxinming.util; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.RSA; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import sun.misc.BASE64Encoder; import java.security.KeyPair; import java.security.PrivateKey; import java.security.PublicKey; import java.util.HashMap; import java.util.Map; @Slf4j public class RsaUtil { /** * 类型 */ public static final String ENCRYPT_TYPE = "RSA"; /** * 获取公钥的key */ private static final String PUBLIC_KEY = "RSAPublicKey"; /** * 获取私钥的key */ private static final String PRIVATE_KEY = "RSAPrivateKey"; /** * 公钥加密 * * @param content: * @param publicKey: * @author: 405 * @date: 2021/6/28 * @return: java.lang.String */ public static String encrypt(String content, PublicKey publicKey) { try { RSA rsa = new RSA(null, publicKey); return rsa.encryptBase64(content, KeyType.PublicKey); } catch (Exception e) { log.error("公钥加密异常 msg:{}",e.getMessage()); } return null; } /** * 公钥加密 * * @param content: * @param publicKey: * @author: 405 * @date: 2021/6/28 * @return: java.lang.String */ public static String encrypt(String content, String publicKey) { try { RSA rsa = new RSA(null, publicKey); return rsa.encryptBase64(content, KeyType.PublicKey); } catch (Exception e) { log.error("公钥加密异常 msg:{}",e.getMessage()); } return null; } /** * 私钥解密 * * @param content: * @param privateKey: * @author: 405 * @date: 2021/6/28 * @return: java.lang.String */ public static String decrypt(String content, PrivateKey privateKey) { try { RSA rsa = new RSA(privateKey, null); return rsa.decryptStr(content, KeyType.PrivateKey); } catch (Exception e) { log.error("私钥解密异常 msg:{}",e.getMessage()); } return null; } /** * 私钥解密 * * @param content: * @param privateKey: * @author: 405 * @date: 2021/6/28 * @return: java.lang.String */ public static String decrypt(String content, String privateKey) { try { RSA rsa = new RSA(privateKey, null); return rsa.decryptStr(content, KeyType.PrivateKey); } catch (Exception e) { log.error("私钥解密异常 msg:{}",e.getMessage()); } return null; } /** * 获取公私钥-请获取一次后保存公私钥使用 * @return */ public static Map<String,String> generateKeyPair() { try { KeyPair pair = SecureUtil.generateKeyPair(ENCRYPT_TYPE); PrivateKey privateKey = pair.getPrivate(); PublicKey publicKey = pair.getPublic(); // 获取 公钥和私钥 的 编码格式(通过该 编码格式 可以反过来 生成公钥和私钥对象) byte[] pubEncBytes = publicKey.getEncoded(); byte[] priEncBytes = privateKey.getEncoded(); // 把 公钥和私钥 的 编码格式 转换为 Base64文本 方便保存 String pubEncBase64 = new BASE64Encoder().encode(pubEncBytes); String priEncBase64 = new BASE64Encoder().encode(priEncBytes); Map<String, String> map = new HashMap<String, String>(2); map.put(PUBLIC_KEY,pubEncBase64); map.put(PRIVATE_KEY,priEncBase64); return map; } catch (Exception e){ e.printStackTrace(); } return null; } public static void main(String[] args) { System.out.println(JSONObject.toJSONString(generateKeyPair())); // String ftpUrl = "ftp://wasu:234@125.2321321he12321321"; // String content = ftpUrl; // encrypt(content,""); } }
三、多重加密
3.1 Aes和Rsa加密
package com.wang.util; public class SecureUtil { public static String aesEncrypt(String content,String key) throws Exception{ return AesUtil.encryptBase64(content, key); } public static String aesDecrypt(String content,String key) throws Exception{ return AesUtil.decryptStr(content, key); } public static String rsaEncrypt(String content,String publicKey) throws Exception{ return RsaUtil.encrypt(content,publicKey); } public static String rsaDecrypt(String content,String privateKey) throws Exception{ return RsaUtil.decrypt(content,privateKey); } public static String aesAndRsaEncrypt(String content,String aseKey ,String publicKey) throws Exception{ String aesDecryptVal = aesEncrypt(content,aseKey); return rsaEncrypt(aesDecryptVal,publicKey); } public static String rsaAndAesDecrypt(String content,String aseKey ,String privateKey) throws Exception{ String aseDecryptVal = rsaDecrypt(content,privateKey); return aesDecrypt(aseDecryptVal,aseKey); } public static String rsaAndAesEncrypt(String content,String aseKey ,String publicKey) throws Exception{ String rsaEncryptVal = rsaEncrypt(content,publicKey); return aesEncrypt(rsaEncryptVal,aseKey); } public static String aesAndRsaDecrypt(String content,String aseKey ,String privateKey) throws Exception{ String aseDecryptVal = aesDecrypt(content,aseKey); return rsaDecrypt(aseDecryptVal,privateKey); } }
调用
//aes加密 String aseDecrypt = SecureUtil.aesEncrypt(val, aesKey); System.out.println(SecureUtil.aesDecrypt(aseDecrypt,aesKey)); //rsa加密 String rsaDecrypt = SecureUtil.rsaEncrypt(val, publicKey); System.out.println(SecureUtil.rsaDecrypt(rsaDecrypt,privateKey)); //aes+rsa String aesRsaDecrypt = SecureUtil.aesAndRsaEncrypt(val, aesKey,publicKey); System.out.println(SecureUtil.rsaAndAesDecrypt(aesRsaDecrypt,aesKey,privateKey)); //rsa+aes String rsaAesDecrypt = SecureUtil.rsaAndAesEncrypt(val, aesKey,publicKey); System.out.println(SecureUtil.aesAndRsaDecrypt(rsaAesDecrypt,aesKey,privateKey));

浙公网安备 33010602011771号