问题标签 [badpaddingexception]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
23613 浏览

java - 使用 AES/ECB 解密时出现“BadPaddingException:垫块损坏”

在 Android/java 应用程序中,

上面的代码总是抛出BadPaddingException: pad block corrupted以下 16 字节加密数据

data = ":ʺ$jhk¨ë‹òºÃ"(数据为 16 个字符)

密钥长度为 16 个字节。

当数据已经是块大小时,为什么会抛出这个异常。?并且不需要填充。

注意:加密数据是从 php 服务器获取的。

编辑:

更改为
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
从后
Cipher cipher = Cipher.getInstance("AES");

解密方法成功,但给出了这个输出 在此处输入图像描述

0 投票
1 回答
451 浏览

java - 为什么在尝试加密字符串时会出现 BadPaddingException?

我通过这个链接在我的 Android 项目中创建了一个Encryption类来加密/解密二进制数据。

然后我在主要活动中运行代码:

然后我BadPaddingException在执行以下代码时得到一个test()

有趣的是,我创建了一个不同于 Android 项目的 Java 项目。并且代码运行良好,没有任何异常。

我的代码有什么问题?

0 投票
1 回答
5398 浏览

java - javax.crypto.BadPaddingException:数据散列错误

我尝试在 java 中编写一个加密包,它包装了 javax.crypto 包并使其使用起来更舒适。所以我实现了一个只包装 javax.crypto 的 RSACore 类。然后我实现了两个类 RSAEncoder 和 RSADecoder 来隐藏 javax.crypto.Cipher 和它的启动。

现在我的问题是:我已经为 RSACore、RSAEncoder 和 RSADecoder 编写了一些小测试。除了解码器的测试之外,所有测试都可以正常工作。当我对编码数据调用 dofinal() 时,我每次都会收到 BadPaddingException。我用谷歌搜索它,发现在大多数情况下它与错误的键有关,但我确信我只生成一对并处理它。我不知道在哪里搜索错误。作为提供者,我使用 bouncycastle,因为在使用 JCE 时,我收到一个错误,即无法使用 OAEP 进行签名以下是完整的错误消息:

这是测试:

你看到有什么逻辑错误吗?我也可以发布编码器、解码器和核心,但那是很多行。感谢您的阅读和帮助!

RSA编码器:

RSADecoder(除 condtructor 外相同):

RSA核心:

0 投票
1 回答
587 浏览

java - 带有 Jasypt 库的 BadPaddingException

我不确定这是一个错误还是我做错了。无论哪种情况,我都需要别人的帮助。

我们在 Web 应用程序中将 Jasypt 和 Spring 2.05 结合在一起,我们在其中加密了属性文件中的一些密码。这件事在 Web 应用程序上运行良好。我们甚至可以使用 BasicTextEncrypor.decrypt(method) 从主方法中解密密码。

但是,我们在执行 JUnit 测试用例时遇到了问题。一旦我们运行测试套件,我们就会得到以下堆栈跟踪。

我深入研究了 Jasypt 的源代码,才知道在幕后抛出了 javax.crypto.BadPaddingException。我不确定为什么直接从 main 方法进行相同的调用和通过 JUnit 框架执行相同的事情之间存在差异,其他一切(例如密码)都是相同的。

0 投票
1 回答
276 浏览

exception - AES 解密的疯狂异常 - BadPaddingException

我在尝试解码一些加密文本时遇到了一些麻烦。CheckpswdBasedKey 总是返回 false,因为 c.doFinal 的 BadPaddingException 我使用的是 AES,基本上是加密:

现在解密模式:

我比较了来自 iv @checkPswdBasedKey 和 iv @generatePswdBasedKey 的字节,它们都是一样的。秘密密钥@checkPswdBasedKey (我得到这些字节: sk.getEncoded() )和秘密密钥@generatePswdBasedKey ......它们都是平等的。所以基本上当我解密时我知道我使用的是相同的密钥、相同的 IV 和相同的消息......以及适当的长度(16 字节密钥、16 字节消息、16 字节 iv,使用 AES 128)任何想法?

0 投票
2 回答
5496 浏览

java - Java AES 解密 BadPaddingException

注意:Java NOOB。

好吧,我知道这个问题已经在这里回答了几十次,但是这些解决方案似乎并不适用/直接适用于我理解它们的地方。(是的,我知道我不完全理解加密/解密、AES 等,但这不是重点,我试图理解这一点)

我有一个实用程序 api,我想在其中传递一个字符串并返回一个加密的字符串。然后我想传递加密的字符串,并返回一个解密的字符串。简单的。它适用于我传入的许多字符串,但在某些情况下,我遇到了异常javax.crypto.BadPaddingException: Given final block not properly padded.

例如,以下加密/解密很好。
util/encrypt/?token=123456789012wha= 4TR0CbCcQKqeRK73zr83aw==
util/decrypt/?token=4TR0CbCcQKqeRK73zr83aw=== 123456789012wha

以下加密但不解密:
util/encrypt/?token=123456789012what= NYaWmwnySoGNHyNmY9Jh+f3O2rqoLI1IAcnsl5V4OCE=
util/decrypt/?token=NYaWmwnySoGNHyNmY9Jh+f3O2rqoLI1IAcnsl5V4OCE== 异常

这是我的控制器中的代码:

我认为它必须与通话有关Cipher.getInstance(),并且我尝试过使用Cipher.getInstance("AES/CBC/PKCS5Padding")但解密时总是失败。我很想真正了解这里发生了什么以及如何解决它。

0 投票
3 回答
2421 浏览

android - Android AES解密和来自iOS的数据:javax.crypto.BadPaddingException:pad block损坏

我试图在 Android 上解密从 发送的备份,并且在方法 doFinal 中显示iOS了异常。javax.crypto.BadPaddingException: pad block corrupted

键和初始向量是从 iOS 以 base64 字符串发送的。相关代码:

关于 Security.getExistingKey:

感谢任何解决方案。

PS这是我们在 iOS 中设置加密的方式:

密钥和IV推导方法:

0 投票
1 回答
536 浏览

java - 将 Java 应用程序移植到 OS X 后出现 BadPaddingException

我正在将我们的 Java 应用程序移植到 OS X (10.8)。我们的一项单元测试在进行加密时失败(它适用于 Windows)。两者都运行 Java 7 Update 21,但 Windows 版本使用 32 位 JDK,Mac 版本使用 64 位 JDK。

在 Mac 上运行它时,尝试解密加密数据时出现以下异常:

引起:javax.crypto.BadPaddingException:给定最终块未在 com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java) 的 com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:811) 正确填充:676) 在 com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:313) 在 javax.crypto.Cipher.doFinal(Cipher.java:2087) 在 com.degoo.backend.security.Crypto.processCipher( Crypto.java:56) ... 25 更多

这是加密类。

测试代码如下所示:

0 投票
1 回答
2356 浏览

java - 使用错误密钥的 Java AES 解密

我写了一个简单的Java AES加密和解密如下(用于学习目的):

密码密钥是一个可变长度的字符串,我对字符串进行 MD5 哈希处理得到 128 位密钥。

我可以使用相同的密钥成功地加密和解密数据。但是如果我用错误的密钥解密数据,我会得到以下异常:

实际上我所期望的是,错误的密钥解密产生了错误的字节,但不会像上面那样抛出异常,因为如果产生错误的字节,黑客可能不知道解密是否正确。如果像上面那样抛出异常,蛮力的输出将变得更容易确定。

那么,我的代码会发生什么?

编辑:

我想我在这里犯了一个错误。黑客可能不会使用我的程序来解密。所以对于AES,如果一个人解密失败,他会知道解密失败,但不是我认为从解密中得到错误字节?这真糟糕...

0 投票
2 回答
4623 浏览

java - AES 解密错误:android 垫块损坏

我环顾堆栈以找到问题的答案,但没有任何效果。我试图实现的是加密在 ASYNCtask 中下载的 XML 文件,然后再对其进行解密。

我已经检查过的内容:

- 加密和解密时生成的密钥相同,并保存在与Base64的sharedpreferenced中。

-IV 是相同的,因为目前它在静态变量中用于测试目的。

-密码设置为 AES/CBC/PKCS5Padding

- 密钥设置为 AES

错误出现在 decryptXml() 的行中:
byte[] decrypted = cipher.doFinal(bytes);

我完全没有想法,似乎没有任何效果。我希望你们中的一些人能在我的代码中找到错误。感谢帮助!

代码:

生成密钥()

XML加密:

解密:

获取密钥():

编辑

添加IV发生器方法