相关疑难解决方法(0)

javax.crypto.BadPaddingException

我正在研究AES算法,我有这个例外,我无法解决.

javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.AESCipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
Run Code Online (Sandbox Code Playgroud)

异常发生在解密部分.我在与解密算法不同的地方初始化密钥

KeyGenerator kgen = KeyGenerator.getInstance("AES");//key generation for AES
kgen.init(128); // 192 and 256 bits may not be available
Run Code Online (Sandbox Code Playgroud)

然后我用我从文件中读取的密文传递给下面的方法

 public String decrypt(String message, SecretKey skey) {

    byte[] raw = skey.getEncoded();
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
    // Instantiate the cipher
    Cipher cipher;

    byte[] original = null;
    try {
        cipher = Cipher.getInstance("AES");

        cipher.init(Cipher.DECRYPT_MODE, skeySpec);
        System.out.println("Original string: "
                + message);
        original = cipher.doFinal(message.trim().getBytes());  //here where I …
Run Code Online (Sandbox Code Playgroud)

java encryption cryptography exception

19
推荐指数
2
解决办法
8万
查看次数

在doFinal的一些调用上badPaddingException.不是全部.相同的输入

我使用javax.crypto.cipher来加密和解密一些数据.它运作良好.但有时候,解密会出现badPaddingException.如果我比较有failling呼叫succefull呼叫,给密码输入相同,并且密码被初始化以同样的方式.

我如何实现我的密码

dcipher = Cipher.getInstance("PBEWithMD5AndDES");
KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt, iterationCount);
SecretKey key = SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(keySpec);
dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
Run Code Online (Sandbox Code Playgroud)

我怎么用它

dec = Base64.decode(str) ;
byte[] utf8 = dcipher.doFinal(dec);
Run Code Online (Sandbox Code Playgroud)

在doFinal上引发了异常.

任何的想法 ?

谢谢 !

哦,顺便说一下,我使用bouncyCastle作为提供者,并将其添加到列表顶部

Security.insertProviderAt(new org.bouncycastle.jce.provider.BouncyCastleProvider(), 1);
Run Code Online (Sandbox Code Playgroud)

为了完整性,并且因为问题仍然不时出现.这是完整的课程.

public class EncryptDecryptUtil {
    /** Encryption Cipher */
    private static Cipher ecipher;
    /** Decription Cipher */
    private static Cipher dcipher;

    private static Logger logger = Logger.getLogger(EncryptDecryptUtil.class);

    /**
     * Constructor used to create this object. Responsible for setting and initializing this object's encrypter …
Run Code Online (Sandbox Code Playgroud)

java encryption cryptography

17
推荐指数
1
解决办法
1万
查看次数

标签 统计

cryptography ×2

encryption ×2

java ×2

exception ×1