出现错误“使用填充密码解密时,输入长度必须是16的倍数”

时间:2019-04-20 14:07:10

标签: java encryption

我尝试加密和解密某些数据,当我运行解密时,出现错误Input length must be multiple of 16 when decrypting with padded cipher

这是我的Java类;

import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import com.thoughtworks.xstream.core.util.Base64Encoder;

public class passwordEncoder {

        private static final String ALGORITHM       = "AES";
        private static final String myEncryptionKey = "ThisIsFoundation";
        private static final String UNICODE_FORMAT  = "UTF8";

        public static String encrypt(String valueToEnc) throws Exception {
            Key key = generateKey();
            Cipher c = Cipher.getInstance(ALGORITHM);
            c.init(Cipher.ENCRYPT_MODE, key);
            byte[] encValue = c.doFinal(valueToEnc.getBytes(UNICODE_FORMAT));
            //String encryptedValue = new Base64Encoder().encode(encValue);
            String encryptedValue = new Base64Encoder().encode(encValue);
            return encryptedValue;
        }

        public static String decrypt(String encryptedValue) throws Exception {
            Key key = generateKey();
            Cipher c = Cipher.getInstance(ALGORITHM);
            c.init(Cipher.DECRYPT_MODE, key);
            byte[] decordedValue = new Base64Encoder().decode(encryptedValue);
            byte[] decValue = c.doFinal(decordedValue);
            String decryptedValue = new String(decValue);
            return decryptedValue;
        }

        private static Key generateKey() throws Exception {
            byte[] keyAsBytes;
            keyAsBytes = myEncryptionKey.getBytes(UNICODE_FORMAT);
            Key key = new SecretKeySpec(keyAsBytes, ALGORITHM);
            return key;
        }
}

任何有关如何解决此错误的建议/帮助,将不胜感激。

0 个答案:

没有答案