AES解密,key长度不够16处理
AES解密,有时会遇到key长度不够16位的场景,如何处理,如下以AES-128-ECB解密模式为例进行展示。
public class Test {public static void main(String[] args) throws Exception {String str="htNbZOHaXvMimfeSoK5jQg==";//AES-128-ECB加密后的密文String decStr=decrypt(str,"123");System.out.println(decStr);}/* ** @Author na_tion* @Description AES解密函数* 也可以使用其他网上常见的函数* @Date 10:53 上午 2020/04/10* @Param [content, passwd]* @return java.lang.String**/public static String decrypt(String content, String passwd) {try {Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");// 创建密码器SecretKeySpec key = new SecretKeySpec(passwd.getBytes(), "AES");cipher.init(Cipher.DECRYPT_MODE, key);// 初始化byte[] result = new BASE64Decoder().decodeBuffer(content);return new String(cipher.doFinal(result)); // 解密} catch (Exception e) {e.printStackTrace();}return null;}}
如上代码,会报如下错误(提示key长度为3字节,不够16字节)
java.security.InvalidKeyException: Invalid AES key length: 3 bytesat com.sun.crypto.provider.AESCrypt.init(AESCrypt.java:87)at com.sun.crypto.provider.ElectronicCodeBook.init(ElectronicCodeBook.java:94)at com.sun.crypto.provider.CipherCore.init(CipherCore.java:591)at com.sun.crypto.provider.CipherCore.init(CipherCore.java:467)at com.sun.crypto.provider.AESCipher.engineInit(AESCipher.java:313)at javax.crypto.Cipher.implInit(Cipher.java:801)at javax.crypto.Cipher.chooseProvider(Cipher.java:863)at javax.crypto.Cipher.init(Cipher.java:1248)at javax.crypto.Cipher.init(Cipher.java:1185)
处理方法:
用\0补齐不够的位数,代码示例如下
public static void main(String[] args) throws Exception {String str="htNbZOHaXvMimfeSoK5jQg==";//AES-128-ECB加密后的密文//String decStr=decrypt(str,"123");String decStr=decrypt(str,"123\0\0\0\0\0\0\0\0\0\0\0\0\0");//用\0补齐不够的位数System.out.println(decStr);}
AES解密,key长度不够16处理相关推荐
- 关于JDK加密解密Key长度限制的三种解决方案
第一种 更换系统 这种方式不怎么推荐,如果这个一个新项目,或者项目规模较小,完全可以通过替换对应jar包,或者升级jdk的版本来解决.但对于一个规模较大,稳定运行的项目,替换jar包可能意味着将系统推 ...
- aes key长度_AES加密(1): 基本AES算法
简介 AES原本指的是一套标准FIPS 197,而AES算法一般指分组大小为128bits的Rijndeal算法,由比利时学者Joan Daemen和Vincent Rijmen提出. AES与Rij ...
- java aes iv 24位_当key和IV是Java字节数组时,用python进行AES解密
我有以下两个值: AES key它是一个Java字节数组64,67,-65,88,-19,-118,-16,-53,-81,-98,44,-83,82,-90,124,112,-120,42,92,6 ...
- 基于python的文件加密传输_python 利用Crypto进行AES解密加密文件
背景:工作需要,部分数据进行了加密传输,对方使用了AES对密码进行了加密,需要获取到解密的数据. 目标:通过密钥成功解密文件. 关键词:AES_ECB,AES_CBC,Java和Python的AES加 ...
- java实现AES解密解密
package com.topnet.utils;import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec;import o ...
- python 利用Crypto进行AES解密加密文件
前言:今天写一个程序的时候: 加密模式:AES/CBC/PKCS5Padding 加密初始化向量:长度为 16 的空字节数组 一直搞不懂长度为16的空字节数组怎么表示 然后我用ECB模式发现跟他给的 ...
- java aes解密算法_使用java实现AES算法的加解密(亲测可用)
话不多说,直接上代码 import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto ...
- AES解密类,解密案例 解决No matching distribution found for Crypto
AES解密类 # 解密武器 class decrypt_AES:def __init__(self, encrypted_data):self.encrypted_data=encrypted_dat ...
- Java带KeyGenerator(密钥生成器)生成AES加密,c++里面AES解密
之前文章Java里面生成AES加密,c++里面AES解密介绍了Java代码加密,c++代码解密.本文介绍:Java带KeyGenerator(密钥生成器)生成AES加密,c++里面AES解密 一.Ja ...
最新文章
- parents()和parent()
- php和asp.net下SQLite3的执行速度对比
- SVM训练时候样本不均衡怎么设置惩罚项
- java语言如何跳转界面_在java中spring mvc页面如何跳转,详细图解
- Exynos4412 中断驱动开发相关问题总结
- 黑科技DeepFake检测方法:利用心跳做信号,还能「揪出」造假模型
- Python自动化运维之15、网络编程之socket、socketserver、select、twisted
- 【云速建站】SSL证书自助部署
- 传新一轮估值200亿美金 小红书回应:以老股东增持为主
- Struts2之checkboxlist 设置默认值和结果回显
- Apple Silicon配置二进制环境(一)
- 卫星图像数据下载地址
- 计算机表格填充,excel自动填充怎样快速填充一列?/excle填充工具
- c语言 修正正弦曲线,[原创]正弦曲线
- Oracle官网 账号及密码
- Photoshop-为图像添加一个真实投影
- 基于脉振高频电流注入的永磁同步电机无感FOC
- 关于Mac软件不兼容的解决方案(xattr)
- git-for-windows下载地址
- HTML入门级学习附教程链接~