AES解密报错java.security.InvalidKeyException: Invalid AES key length: xx bytes

这篇具有很好参考价值的文章主要介绍了AES解密报错java.security.InvalidKeyException: Invalid AES key length: xx bytes。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

由于与其它系统接口对接,需要进行加密处理。

对接系统采用AES加密方式,作为接收方获取加密内容,通过AES解密拿到数据。

解密过程中遇到报错如下:

java.security.InvalidKeyException: Invalid AES key length: 20 bytes

二、Invalid AES key length: 20 bytes的解决方法

出现此错误,主要原因是秘钥长度不符合要求所导致的。

AES允许128位,192位或256位密钥长度。 这也就意味着秘钥只能是16,24或32个字节。

话不多说,代码呈现如下:

public class AESUtil {

	private static final String AES = "AES";
	private static final String UTF8 = "UTF-8";
	private static final String CIPHERALGORITHM = "AES/ECB/PKCS5Padding";
	private static final String Key = "9!#95hsup*&$1zq79$%a";

	/**
	 * AES加密
	 * 
	 * @param content
	 * @return
	 * @throws Exception
	 */
	public static String encrypt(String content) {
		try {
			byte[] encodeFormat = Key.getBytes();
			SecretKeySpec key = new SecretKeySpec(encodeFormat, AES);
			// Cipher对象实际完成加密操作
			Cipher cipher = Cipher.getInstance(CIPHERALGORITHM);
			// 加密内容进行编码
			byte[] byteContent = content.getBytes(UTF8);
			// 用密匙初始化Cipher对象
			cipher.init(Cipher.ENCRYPT_MODE, key);
			// 正式执行加密操作
			byte[] result = cipher.doFinal(byteContent);
			return Hex.encodeHexString(result);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * AES解密
	 * 
	 * @param contents
	 * @return
	 * @throws Exception
	 */
	public static String decrypt(String content) {
		try {
			// 密文使用Hex解码
			byte[] byteContent = Hex.decodeHex(content.toCharArray());
			byte[] encodeFormat = Key.getBytes();
			SecretKeySpec key = new SecretKeySpec(encodeFormat, AES);
			// Cipher对象实际完成加密操作
			Cipher cipher = Cipher.getInstance(AES);
			// 用密匙初始化Cipher对象
			cipher.init(Cipher.DECRYPT_MODE, key);
			// 正式执行解密操作
			byte[] result = cipher.doFinal(byteContent);
			return new String(result, UTF8);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
}

执行报错,因为KEY的值是9!#95hsup*&$1zq79$%a,长度为20,如果长度修改成16,KEY值为9!#95hsup*&$1zq7,执行就正常了。文章来源地址https://www.toymoban.com/news/detail-735243.html

到了这里,关于AES解密报错java.security.InvalidKeyException: Invalid AES key length: xx bytes的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java.security.InvalidKeyException: IOException : algid parse error, not a sequence

    问题: 读取私钥时报错: KeyFactory keyFactory = KeyFactory.getInstance(\\\"RSA\\\"); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec( Base64.decodeBase64(privateKeyPEM) ); 错误原因 : 私钥格式错误,错误的privateKey是通过openssl生成的私钥,默认pkcs1格式(将文件中去掉私钥头-----BEGIN RSA PRIVATE KEY-----和私钥尾

    2023年04月09日
    浏览(35)
  • java:AES加密和解密

    1 前言 对称加密,即单秘钥加密,指加密和解密的过程中,使用相同的秘钥,相比于非对称加密,因仅有一把钥匙,故而速度更快,更适合解密大文件(常见于如视频文件的加密解密中)。AES算法就属于对称加密中的一种。 2 使用 依赖引入: AES加密与解密的工具类封装: 执

    2024年02月11日
    浏览(56)
  • 前端CryptoJS-AES加解密 对应php的AES-128-CBC加解密踩坑(java也相同加解密)

     前端部分注意看填充是pkcs7 有个前提,要看前端有没有转成hex格式,如果没转,php那边就不需要调用特定函数转hex格式的 后端php代码

    2024年02月15日
    浏览(52)
  • Java 实现 AES 加密和解密完整示例

    AES,全称为 Advanced Encryption Standard,是一种分组密码算法,用于保护敏感数据的传输和存储。AES 分为 128 位和 256 位两种密钥长度,可以对数据进行加密和解密,保证数据的安全性和完整性。AES 主要应用于电子商务、移动支付、网络安全等领域,被广泛运用于现代社会的各个

    2024年02月04日
    浏览(65)
  • 解决cryptoJS.AES默认参数加密,java无法解密的问题

    有时候我们需要跨编程语言进行加密加密。比如nodejs里面加密,java里面解密,或者反过来java加密,nodejs解密。node可以使用cryptojs,java可以使用javax.crypto.Cipher包。 网上有很多关于这方面的文章。然而如果node使用了默认的参数进行加密(比如现有业务已经生成了一些已经加密

    2024年02月11日
    浏览(103)
  • Java:SpringBoot使用AES对JSON数据加密和解密

    客户端和服务端都可以加密和解密,使用base64进行网络传输 加密方 解密方 2.1、项目结构 2.2、常规业务代码 pom.xml Application.java WebMvcConfig.java CrossConfig.java JsonRequest.java JsonResult.java JsonResultVO.java IndexController.java UserController.java 2.3、加密的实现 application.yml SecretData.java DecryptRequ

    2024年02月11日
    浏览(54)
  • AES-GCM算法 Java与Python互相加解密

    AES加密算法全称是Advanced Encryption Standard(高级加密标准),是美国NIST在2001年发布的,旨在代替DES称为广泛使用的标准。AES是一种对称分组密码算法。 AES的明文分组长度为128位(16字节),密钥长度可以为128位(16字节)、192位(24字节)、256位(32字节),根据密钥长度的不

    2024年02月12日
    浏览(48)
  • 前端使用AES密码加密、解密,使用详细(crypto加密解密,前后端分离,AES加密解密)

    1、 首先安装 crypto-js插件,安装命令如下:    -S等同于--save,保存在package.json文件中,是在dependencies 下, --save安装包信息将加入到dependencies(生产环境)中,生产阶段的依赖,也就是项目运行时的依赖,就是程序上线后仍然需要依赖; -D等同于--save-dev,也保存在package.j

    2024年02月11日
    浏览(59)
  • JAVA加密解密异常之java.security.NoSuchAlgorithmException: Cannot find any provider supporting DES/CBC/PKCS7

    AVA加密解密异常之java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES/CBC/PKCS7Padding 网上最接近的解决办法: 最后解决办法: 1.在jdk中的jrelibsecurity修改java.security文件,替换security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider。 并将原有的#security.provider.7=com.sun.s

    2024年02月03日
    浏览(49)
  • 使用AES加解密异常

    问题 :有八台机器,一台机器出现解密失败,出现 java.security.InvalidKeyException: Illegal key size 解决 :最初没有错误信息,进行盲排预估是编码问题,最后排除了系统编码问题,后面增加日志出现上述异常,查找信息发现是jce包下的jar因为技术受限导致的错误,所以开始比较机器

    2024年02月08日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包