我在 java 类中遇到解密错误:
javax.crypto.IllegalBlockSizeException :
Input length must be multiple of 16 when decrypting with padded cipher.
我能做些什么来解决这个问题?
更新:
我忘了提到它正在工作一次,当我第二次尝试再次执行它时,它会抛出上述错误。
package com.tb.module.service;
import java.security.Key;
import java.security.spec.InvalidKeySpecException;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.*;
/**
* This class is used for encrypt and decrypt the password field.
*
*/
public class PswdEnc {
private static final String ALGO = "AES";
private static final byte[] keyValue = new byte[] { 'T', 'h', 'e', 'B', 'e', 's', 't','S', 'e', 'c', 'r','e', 't', 'K', 'e', 'y' };
public static String encrypt(String Data) throws Exception {
Key key = generateKey();
Cipher c = Cipher.getInstance(ALGO);
c.init(Cipher.ENCRYPT_MODE, key);
byte[] encVal = c.doFinal(Data.getBytes());
String encryptedValue = new BASE64Encoder().encode(encVal);
return encryptedValue;
}
public static String decrypt(String encryptedData) throws Exception {
Key key = generateKey();
Cipher c = Cipher.getInstance(ALGO);
c.init(Cipher.DECRYPT_MODE, key);
byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedData);
byte[] decValue = c.doFinal(decordedValue);
String decryptedValue = new String(decValue);
return decryptedValue;
}
private static Key generateKey() throws Exception {
Key key = new SecretKeySpec(keyValue, ALGO);
return key;
}
}
最佳答案
您使用的算法“AES”是“AES/ECB/NoPadding”的简写。这意味着您正在使用 AES algorithm具有 128 位 key 大小和 block size , 与 ECB mode of operation和 no padding .
换句话说:您只能加密 128 位或 16 字节的数据 block 。这就是您收到 IllegalBlockSizeException 异常的原因。
如果您想加密大小不是 16 字节的倍数的数据,您将不得不使用某种填充或密码流。例如,您可以使用 CBC mode (一种将分组密码有效地转换为 stream cipher 的操作模式)通过指定“AES/CBC/NoPadding”作为算法,或通过指定“AES/ECB/PKCS5”进行PKCS5填充,这将自动添加一些字节以非常特定的格式结束数据,以使密文的大小成为 16 字节的倍数,并且解密算法将理解它必须忽略某些数据。
无论如何,我强烈建议你现在停下手头的工作,去学习一些关于密码学的入门 Material 。例如,检查 Crypto I on Coursera .您应该非常了解选择一种或另一种模式的含义,它们的优势是什么,最重要的是,它们的劣势是什么。如果没有这些知识,就很容易构建很容易被破坏的系统。
更新:根据您对该问题的评论,将密码存储在数据库中时永远不要加密!!!!!!你永远不应该这样做。您必须对密码进行HASH,正确加盐,这与加密完全不同。真的,请不要做你想做的事......通过加密密码,它们可以被解密。这意味着您作为数据库管理员并且知道 key ,您将能够读取存储在数据库中的每个密码。要么您知道这一点并且正在做非常非常糟糕的事情,或者您不知道这一点,应该感到震惊并停止它。
关于javax.crypto.IllegalBlockSizeException : Input length must be multiple of 16 when decrypting with padded cipher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17234359/
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG
开门见山|拉取镜像dockerpullelasticsearch:7.16.1|配置存放的目录#存放配置文件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/config#存放数据的文件夹mkdir-p/opt/docker/elasticsearch/node-1/data#存放运行日志的文件夹mkdir-p/opt/docker/elasticsearch/node-1/log#存放IK分词插件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/plugins若你使用了moba,直接右键新建即可如上图所示依次类推创建
一、概述在之前的一篇博文中,记录了AT24C01、AT24C02芯片的读写驱动,先将之前的相关文章include一下:1.IIC驱动:4位数码管显示模块TM1637芯片C语言驱动程序2.AT24C01/AT24C02读写:AT24C01/AT24C02系列EEPROM芯片单片机读写驱动程序本文记录分享AT24C04、AT24C08、AT24C16芯片的单片机C语言读写驱动程序。二、芯片对比介绍型号容量bit容量byte页数字节/页器件寻址位可寻址器件数WordAddress位数/字节数备注AT24C044k5123216A2A149/1WordAddress使用P0位AT24C088k1024
这个问题在这里已经有了答案:Errorinstallingmysql2:Failedtobuildgemnativeextension(32个答案)关闭5年前。我不知道在ubuntu上安装mysql2:(sudogeminstallmysql2Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingmysql2:ERROR:Failedtobuildgemnativeextension.currentdirectory:/var/lib/gems/2.3.0/gems/mysql2-0.4.4/ext/my
我正在使用sass为我正在开发的一个简单的静态网站编写css。我运行了sass--watchcustom.scss:custom.css,它在启动时编译良好,并显示消息:Sassiswatchingforchanges.PressCtrl-Ctostop.overwritecustom.css但是,每当我更新.scss文件时,什么也没有发生。我以前没有在Rails应用程序的上下文之外使用过SASS,所以我想知道我是否遗漏了什么?我的scss文件也非常简单,所以我怀疑它有什么问题,特别是因为它在第一次运行时就可以工作。sass-v报告Sass3.1.16(BrainyBetty),在Li
更新前一切正常。将ruby1.9.3p392与RVM和rails(3.2.12)结合使用使用MySQL5.7.16和Nginx和Unicorn日志显示LoadError:libmysqlclient.so.18:cannotopensharedobjectfile:Nosuchfileordirectory-/home/bill/apps/xxx/shared/bundle/ruby/1.9.1/gems/mysql2-0.3.16/lib/mysql2/mysql2.so我试过:卸载/安装mysql2gem运行捆绑安装没有任何效果。更新后有人遇到这个问题吗?
我升级到imagemagick-7.0.4-3.sierra,现在我之前安装的RMagck2.16失败了。我检查了MagicWand:$find/usr/local-nameMagickWand.h/usr/local/Cellar/imagemagick/7.0.4-3/include/ImageMagick-7/MagickWand/MagickWand.h所以它似乎在那里。我还重新安装并重新链接了pgk-config。也没有帮助。有任何想法吗? 最佳答案 我刚刚在运行Sierra的新Mac上遇到并解决了这个问题。目前似乎没有针
[电路]系列文章目录1-发出功率和吸收功率关系2-独立源和受控源3-基尔霍夫定律4-两端电路等效变换、电阻串并联5-电压源、电流源的串联和并联6-电阻的星形连接和角形连接等效变换(星角变换)7-实际电源模型和等效变换8-无源一端口网络输入电阻9-电路的图及相关概念10-支路电流法11-网孔电流法12-回路电流法13-结点电压法14-叠加定理和齐性定理15-替代定理16-戴维宁定理和诺顿定理文章目录[电路]系列文章目录一、戴维宁定理1定义2图示说明3说明4例题二、诺顿定理1定义2图示说明3说明三、特殊说明一、戴维宁定理1定义任何一个线性含源一端口网络,对外电路来说,总可以用一个电压源和电阻的串联
我正在尝试解密使用OpenSSL命令行界面创建的文件。此文件创建于:opensslaes-256-cbc-a-infile.txt-outfile_encrypted.txt并且可以用以下方法解密:opensslaes-256-cbc-d-a-infile_encrypted.txt通过使用-p标志,我可以检索WebCryptoAPI所需的实际值、salt和IV:>opensslaes-256-cbc-d-a-p-infile_encrypted.txtsalt=F57F1CC0CD384326key=0E971326890959386F1CFB91F185CFE109203DCEBC