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处理相关推荐

  1. 关于JDK加密解密Key长度限制的三种解决方案

    第一种 更换系统 这种方式不怎么推荐,如果这个一个新项目,或者项目规模较小,完全可以通过替换对应jar包,或者升级jdk的版本来解决.但对于一个规模较大,稳定运行的项目,替换jar包可能意味着将系统推 ...

  2. aes key长度_AES加密(1): 基本AES算法

    简介 AES原本指的是一套标准FIPS 197,而AES算法一般指分组大小为128bits的Rijndeal算法,由比利时学者Joan Daemen和Vincent Rijmen提出. AES与Rij ...

  3. 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 ...

  4. 基于python的文件加密传输_python 利用Crypto进行AES解密加密文件

    背景:工作需要,部分数据进行了加密传输,对方使用了AES对密码进行了加密,需要获取到解密的数据. 目标:通过密钥成功解密文件. 关键词:AES_ECB,AES_CBC,Java和Python的AES加 ...

  5. java实现AES解密解密

    package com.topnet.utils;import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec;import o ...

  6. python 利用Crypto进行AES解密加密文件

     前言:今天写一个程序的时候: 加密模式:AES/CBC/PKCS5Padding 加密初始化向量:长度为 16 的空字节数组 一直搞不懂长度为16的空字节数组怎么表示 然后我用ECB模式发现跟他给的 ...

  7. java aes解密算法_使用java实现AES算法的加解密(亲测可用)

    话不多说,直接上代码 import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto ...

  8. AES解密类,解密案例 解决No matching distribution found for Crypto

    AES解密类 # 解密武器 class decrypt_AES:def __init__(self, encrypted_data):self.encrypted_data=encrypted_dat ...

  9. Java带KeyGenerator(密钥生成器)生成AES加密,c++里面AES解密

    之前文章Java里面生成AES加密,c++里面AES解密介绍了Java代码加密,c++代码解密.本文介绍:Java带KeyGenerator(密钥生成器)生成AES加密,c++里面AES解密 一.Ja ...

最新文章

  1. parents()和parent()
  2. php和asp.net下SQLite3的执行速度对比
  3. SVM训练时候样本不均衡怎么设置惩罚项
  4. java语言如何跳转界面_在java中spring mvc页面如何跳转,详细图解
  5. Exynos4412 中断驱动开发相关问题总结
  6. 黑科技DeepFake检测方法:利用心跳做信号,还能「揪出」造假模型
  7. Python自动化运维之15、网络编程之socket、socketserver、select、twisted
  8. 【云速建站】SSL证书自助部署
  9. 传新一轮估值200亿美金 小红书回应:以老股东增持为主
  10. Struts2之checkboxlist 设置默认值和结果回显
  11. Apple Silicon配置二进制环境(一)
  12. 卫星图像数据下载地址
  13. 计算机表格填充,excel自动填充怎样快速填充一列?/excle填充工具
  14. c语言 修正正弦曲线,[原创]正弦曲线
  15. Oracle官网 账号及密码
  16. Photoshop-为图像添加一个真实投影
  17. 基于脉振高频电流注入的永磁同步电机无感FOC
  18. 关于Mac软件不兼容的解决方案(xattr)
  19. git-for-windows下载地址
  20. HTML入门级学习附教程链接~

热门文章

  1. javascript函数习题
  2. nginx开启https配置
  3. 终极肖像美容润饰PS动作
  4. 将新的驱动源文件添加进android内核进行编译
  5. SecureCRT 8.0下载及注册教程
  6. 集成学习【二】:Adaboost结合神经网络及代码实现
  7. Diskeeper 2010 中文破解注册版 强烈推荐!顶级磁盘碎片整理软件
  8. 解决端口被占用的方法(查看端口和关闭端口)
  9. efi系统分区是什么?efi系统分区怎么删除?
  10. Android系统手机开机画面各个阶段代码执行流程分析(Part1)