AES256-GCM-NOPADDING安全加密解密

import org.apache.commons.codec.binary.Hex;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.GCMParameterSpec;
import java.nio.charset.StandardCharsets;
import java.security.Key;
import java.security.SecureRandom;
import java.security.Security;
import java.util.Set;/*** @author: mek* Date: 2023-2-6* Time: 8:40* vx: 250023777* Description: AES_256/GCM/NOPADDING加解密* @version: 1.0*/
public class AES256GCMUtil {private final static String ALGO = "AES_256/GCM/NOPADDING";public static final int AES_KEY_SIZE = 256;public static final int GCM_IV_LENGTH = 12;public static final int TLEN = 128;static {Set<String> algorithms = Security.getAlgorithms("Cipher");if (!algorithms.contains(ALGO)) {throw new IllegalArgumentException("AES256加解密系统不可用");}}public String encrypt(String txt, String pwd) throws Exception {Cipher cipher = Cipher.getInstance(ALGO);byte[] iv = new byte[GCM_IV_LENGTH];SecureRandom secureRandom = new SecureRandom();secureRandom.nextBytes(iv);cipher.init(Cipher.ENCRYPT_MODE, generateKey(pwd), new GCMParameterSpec(TLEN, iv));//iv和加密后的字节数组进行组合(用于解密时获取iv和加密内容)byte[] txtBytes = txt.getBytes(StandardCharsets.UTF_8);byte[] enctyptBytes = cipher.doFinal(txtBytes);byte[] message = new byte[GCM_IV_LENGTH + enctyptBytes.length];System.arraycopy(iv, 0, message, 0, GCM_IV_LENGTH);System.arraycopy(enctyptBytes, 0, message, GCM_IV_LENGTH, enctyptBytes.length);return Hex.encodeHexString(message);}public String decrypt(String txt, String pwd) throws Exception {//分离iv和加密内容byte[] txtBytes = Hex.decodeHex(txt.toCharArray());byte[] iv = new byte[GCM_IV_LENGTH];byte[] content = new byte[txtBytes.length - GCM_IV_LENGTH];System.arraycopy(txtBytes, 0, iv, 0, GCM_IV_LENGTH);System.arraycopy(txtBytes, GCM_IV_LENGTH, content, 0, content.length);Cipher cipher = Cipher.getInstance(ALGO);GCMParameterSpec params = new GCMParameterSpec(TLEN, iv);cipher.init(Cipher.DECRYPT_MODE, generateKey(pwd), params);return new String(cipher.doFinal(content), StandardCharsets.UTF_8);}public Key generateKey(String keystr) throws Exception {KeyGenerator kg = KeyGenerator.getInstance("AES");SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG", "SUN");secureRandom.setSeed(keystr.getBytes(StandardCharsets.UTF_8));kg.init(AES_KEY_SIZE, secureRandom);return kg.generateKey();}public static void main(String[] args) throws Exception {//testAES256GCMUtil app = new AES256GCMUtil();String content = "小白痴,stupid:666+-*/";String encryptStr = app.encrypt(content, "aaaa");System.out.println("原始内容:" + content);System.out.println("加密内容:" + encryptStr);System.out.println("解密内容:" + app.decrypt(encryptStr, "aaaa"));}
}
  • 运行结果
原始内容:小白痴,stupid:666+-*/
加密内容:0d1cb615a90a174d9a7d27fdd697c22f9e620c07914768a570b86c67132299749122d2d6fb38d0d34bcf1d56d1fb4431b51524d8adf7
解密内容:小白痴,stupid:666+-*/

感觉有帮助的就点个赞呗。

AES256-GCM-NOPADDING加密解密(java)相关推荐

  1. AES AES/GCM/NoPadding 加密解密

    public class AESUtils {public static final String algorithm = "AES";// AES/GCM/NoPadding: ...

  2. 凯撒密码加密解密——Java代码(密码学)

    凯撒密码加密解密--Java代码(密码学) 凯撒密码: 恺撒密码(英语:Caesar cipher),或称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文 ...

  3. Android报加密错误,在android中解密使用aes/gcm/nopadding加密的消息时出错

    我目前正在使用aes/gcm/nopadding执行密码操作. 我的加密代码: fun encrypt(plainText: ByteArray, key: Key): ByteArray? { va ...

  4. java实现加密解密抽象_DES加密解密-java实现

    DES加密解密涉及到的JAVA类 Cipher 此类为加密和解密提供密码功能.它构成了 Java Cryptographic Extension (JCE) 框架的核心. 为创建 Cipher 对象, ...

  5. RSA加密解密-java

    RSA加密解密 maven依赖: <!-- RSA --><dependency><groupId>org.apache.axis</groupId>& ...

  6. java 文件进行加密解密,java 对文件加密解密,该如何解决

    java 对文件加密解密 本帖最后由 Hong_1993 于 2014-09-03 10:51:35 编辑 我现在想做一个基于spring mvc 模式的 实现对  文件或目录文件   的加解密(de ...

  7. java 3des_如何用Java进行3DES加密解密 java实现3des加密解密教程

    3des,全称为3DESede或TripleDES,中文解释为是三重数据加密,用户可以通过通过对DES算法进行改进,针对每个数据块进行三次DES加密,下面小编为你带来java实现3des加密解密教程! ...

  8. java url加密解密,Java加密解密 -Jasypt

    1. download url http://www.jasypt.org/download.html 2. 依赖 jar jasypt-1.9.0.jar 3. 加密 // 默认加密/解密算法是 P ...

  9. java url加密解密,java URL 编码解码,该如何解决

    java URL 编码解码 我写了两个接口 一个是对字符串加密 的,一个是解密的  .加密的可以通过调用接口生成加密字符串如下: Oc0PEwKrLzHqT25hYLhWP5wlk5HROPJoWC3 ...

最新文章

  1. 自己挖坑自己填,谷歌大改Transformer注意力,速度、内存利用率都提上去了
  2. php批量请求url_php请求url的方法小结
  3. 用Lean Pilots推动改进
  4. ScrollViewer滚动究竟来触发载入数据的Behavior
  5. ubuntu-桌面版-常用设置
  6. 基本数据类型____字典
  7. 分享一个数据产品经理的PRD
  8. 表达式计算器类的设计4(面向对象的表达式计算器7)
  9. 【前端性能优化】不用 setTimeout 实现防抖
  10. 英特尔放出Linux微代码以修复Meltdown和Spectre漏洞
  11. 题解 P1006 传纸条
  12. 无人驾驶之硬件平台详解
  13. 找一下不男不女 ?。。?
  14. Unable to validate using XSD: Your JAXP provider does not support XML Schema
  15. python计算圆周率_Python圆周率计算
  16. 极线几何(Epipolar Geometry)
  17. C语言利用瑞丽分布产生高斯白噪声
  18. 2-2学生成绩统计(加强版)
  19. 记一次计算机课作文,记一次难熬的课作文600字
  20. 生物信息学 | 富集分析

热门文章

  1. Graphx社区发现算法学习
  2. Premiere视频调色处理,将彩色画面转变成黑白色 myblogfree
  3. 解决None of the constructors found with ‘Autofac.Core.Activators.Reflection.DefaultConstructorFinder’
  4. 的确恶搞:教你调戏QQ好友
  5. 【操作系统/计组】页面大小 与 页表项 ( 二级页表 、多级页表 )
  6. book review----Philosophical Issues in Tourism (Aspects of Tourism)
  7. 2.12 FreeRTOS_RingBuff 环形缓存数组的使用
  8. SEO 小白攻略 to replace
  9. 传奇私服服务器怎么增加npc,传奇私服装备打造NPC设置方法
  10. bugku--秋名山车神速度要快