问题标签 [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.
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");
解密方法成功,但给出了这个输出
java - 为什么在尝试加密字符串时会出现 BadPaddingException?
我通过这个链接在我的 Android 项目中创建了一个Encryption
类来加密/解密二进制数据。
然后我在主要活动中运行代码:
然后我BadPaddingException
在执行以下代码时得到一个test()
:
有趣的是,我创建了一个不同于 Android 项目的 Java 项目。并且代码运行良好,没有任何异常。
我的代码有什么问题?
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核心:
java - 带有 Jasypt 库的 BadPaddingException
我不确定这是一个错误还是我做错了。无论哪种情况,我都需要别人的帮助。
我们在 Web 应用程序中将 Jasypt 和 Spring 2.05 结合在一起,我们在其中加密了属性文件中的一些密码。这件事在 Web 应用程序上运行良好。我们甚至可以使用 BasicTextEncrypor.decrypt(method) 从主方法中解密密码。
但是,我们在执行 JUnit 测试用例时遇到了问题。一旦我们运行测试套件,我们就会得到以下堆栈跟踪。
我深入研究了 Jasypt 的源代码,才知道在幕后抛出了 javax.crypto.BadPaddingException。我不确定为什么直接从 main 方法进行相同的调用和通过 JUnit 框架执行相同的事情之间存在差异,其他一切(例如密码)都是相同的。
exception - AES 解密的疯狂异常 - BadPaddingException
我在尝试解码一些加密文本时遇到了一些麻烦。CheckpswdBasedKey 总是返回 false,因为 c.doFinal 的 BadPaddingException 我使用的是 AES,基本上是加密:
现在解密模式:
我比较了来自 iv @checkPswdBasedKey 和 iv @generatePswdBasedKey 的字节,它们都是一样的。秘密密钥@checkPswdBasedKey (我得到这些字节: sk.getEncoded() )和秘密密钥@generatePswdBasedKey ......它们都是平等的。所以基本上当我解密时我知道我使用的是相同的密钥、相同的 IV 和相同的消息......以及适当的长度(16 字节密钥、16 字节消息、16 字节 iv,使用 AES 128)任何想法?
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")
但解密时总是失败。我很想真正了解这里发生了什么以及如何解决它。
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推导方法:
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 更多
这是加密类。
测试代码如下所示:
java - 使用错误密钥的 Java AES 解密
我写了一个简单的Java AES加密和解密如下(用于学习目的):
密码密钥是一个可变长度的字符串,我对字符串进行 MD5 哈希处理得到 128 位密钥。
我可以使用相同的密钥成功地加密和解密数据。但是如果我用错误的密钥解密数据,我会得到以下异常:
实际上我所期望的是,错误的密钥解密产生了错误的字节,但不会像上面那样抛出异常,因为如果产生错误的字节,黑客可能不知道解密是否正确。如果像上面那样抛出异常,蛮力的输出将变得更容易确定。
那么,我的代码会发生什么?
编辑:
我想我在这里犯了一个错误。黑客可能不会使用我的程序来解密。所以对于AES,如果一个人解密失败,他会知道解密失败,但不是我认为从解密中得到错误字节?这真糟糕...
java - AES 解密错误:android 垫块损坏
我环顾堆栈以找到问题的答案,但没有任何效果。我试图实现的是加密在 ASYNCtask 中下载的 XML 文件,然后再对其进行解密。
我已经检查过的内容:
- 加密和解密时生成的密钥相同,并保存在与Base64的sharedpreferenced中。
-IV 是相同的,因为目前它在静态变量中用于测试目的。
-密码设置为 AES/CBC/PKCS5Padding
- 密钥设置为 AES
错误出现在 decryptXml() 的行中:
byte[] decrypted = cipher.doFinal(bytes);
我完全没有想法,似乎没有任何效果。我希望你们中的一些人能在我的代码中找到错误。感谢帮助!
代码:
生成密钥()
XML加密:
解密:
获取密钥():
编辑
添加IV发生器方法