Tag: badpaddingexception

AES文件解密“给定最终块未正确填充”

我想加密然后解密文件使用AES。 我已经阅读了很多关于错误的主题”Given final block not properly padded” 。 但我找不到解决方案。 抱歉指定我的代码的语言,我不知道写java语言 这是我的代码: 变量 // IV, secret, salt in the same time private byte[] salt = { ‘h’, ‘u’, ‘n’, ‘g’, ‘d’, ‘h’, ‘9’, ‘4’ }; public byte[] iv; public SecretKey secret; createSecretKey public void createSecretKey(String password){ SecretKeyFactory factory = SecretKeyFactory.getInstance(“PBKDF2WithHmacSHA1”); KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, […]

加密在唯一文件中附加IVSBytes的文件 – 执行:给定最终块未正确填充

我正在尝试使用带有SHA-256密钥的AES加密文件。 当我生成IV时,我在加密文件的开始时预先加上它,然后追加其余的。 当我恢复IV并比较它(IV后的过程和后来的过程)它们是相同的。 问题是当我尝试解密文件时: javax.crypto.BadPaddingException:给定最终块未正确填充 我想这可能是因为我没有正确读取以下字节,但我修改了代码,看起来好了。 加密类: private static String password; private static String salt; private static int pswdIterations = 65536 ; private static int keySize = 256; private byte[] ivBytes; public void encryptOfFile(byte[] bytes, File out) throws Exception { byte[] saltBytes = salt.getBytes(“UTF-8”); System.out.println(“Salt bfre:” +salt); // Derive the key SecretKeyFactory factory = SecretKeyFactory.getInstance(“PBKDF2WithHmacSHA1”); […]

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

我通过此链接创建了一个Encryption类来Encryption /解密我的Android项目中的二进制数据。 package com.my.package; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; // TODO Incomplete class public class Encryption { private static final byte[] salt = { (byte) 0xA4, (byte) 0x0B, (byte) 0xC8, (byte) 0x34, (byte) 0xD6, (byte) 0x95, (byte) 0xF3, (byte) 0x13 }; private static int BLOCKS = 128; private static byte[] […]

Java AES解密BadPaddingException

注意:Java NOOB。 好吧,我知道这里已经回答了几十次,但解决方案似乎不能直接应用于我理解它们的地方。 (是的,我知道我不完全理解加密/解密,AES等等,但这不是重点,我试图理解这一点) 我有一个实用程序api,我想传递一个字符串并返回一个加密的字符串。 然后我想传递加密的字符串,并返回一个解密的字符串。 简单。 它适用于我传入的许多字符串,但在某些字符串上,我得到exceptionjavax.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= = exception 这是我的控制器中的代码: private static final String ALGO = “AES”; @RequestMapping(value = “/util/encrypt/”, method = RequestMethod.GET) @ResponseBody public String encrypt(HttpServletResponse httpResponse, @RequestParam(value = “token”, required=true) […]

Java中的RSA BadPaddingException – 在JRE中解密Android中的解密

我发现了一些其他的问题,但我没有找到解释是什么导致这个问题。 我在Java中编写了一个函数来加密数据,将其存储到一个文件中并解密它再次加载文件。 由于它是非对称加密,因此我有一个公钥和私钥,它直接存储在代码中以便进行测试。 问题似乎是加密本身的差异,因为该function适用​​于Android以及安装了Java RE 7的Windows机器上。 但是不可能使用相同的密钥和function来加密来自JRE7系统上的Android的数据,结果是“糟糕的填充执行”。 出于测试目的,我只使用一个数据块。 由于en / decrypt在每个系统中都有效,我确信问题不是关键。 最终版本将对二进制数据进行编码和解码 – 所以我只使用字节而不必担心字符串中的不同字符集。 在我理解了原因之后,我将使用pureRSA解码PHP中的数据。 import java.io.DataInputStream; import java.io.FileInputStream; import java.io.DataOutputStream; import java.io.FileOutputStream; import android.util.Base64; import java.math.BigInteger; import java.security.InvalidAlgorithmParameterException; import javax.crypto.Cipher; import java.security.KeyFactory; import java.security.spec.RSAPublicKeySpec; import java.security.spec.PKCS8EncodedKeySpec; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.spec.InvalidKeySpecException; import javax.crypto.NoSuchPaddingException; import java.security.InvalidKeyException; import javax.crypto.IllegalBlockSizeException; import javax.crypto.BadPaddingException; […]

使用相同的密钥解密AES时BadPaddingException

这是测试人员: public class CryptographySimpleTests extends ActivityTestCase { public void testsCryptographyClass_encryptAndDecrypt() { final String orgVal = “hi world! :D”; final String key = “key”; try { final byte[] encryptKey = Cryptography.deriveAES256Key(key); final byte[] decryptKey = Cryptography.deriveAES256Key(key); //Deviation method Assert.assertTrue(Arrays.equals(encryptKey, decryptKey)); byte[] encrypted = Cryptography.encryptAES(encryptKey, orgVal.getBytes()); Assert.assertFalse(Arrays.equals(encrypted, orgVal.getBytes())); byte[] decrypted = Cryptography.decryptAES(decryptKey, encrypted); Assert.assertTrue(Arrays.equals(orgVal.getBytes(), decrypted)); } catch […]