Java 使用同一密码实例时出现异常
我有这个加密代码,工作没有问题。我可以用另一种语言解密它加密的文本,但我现在需要用java解密它Java 使用同一密码实例时出现异常,java,encryption,Java,Encryption,我有这个加密代码,工作没有问题。我可以用另一种语言解密它加密的文本,但我现在需要用java解密它 private static final String AES = "AES"; private static final String CBC_BLOCK = "CBC"; private static final String ECB_BLOCK = "ECB"; private static final String PADDING = "PKCS5Padding";
private static final String AES = "AES";
private static final String CBC_BLOCK = "CBC";
private static final String ECB_BLOCK = "ECB";
private static final String PADDING = "PKCS5Padding";
private static final String AES_CBC_PCKS5_CIPHER_CONFIG = AES + "/" + CBC_BLOCK + "/" + PADDING;
private static final String AES_ECB_PCKS5_CIPHER_CONFIG = AES + "/" + ECB_BLOCK + "/" + PADDING;
public static String encryptInAesEcbPkcs5Padding(String salt, String message) {
String encryptedMessage = "";
SecretKeySpec key = null;
try {
if (message != null && !message.equals("")) {
key = new SecretKeySpec(salt.getBytes(StandardCharsets.UTF_8), AES);
Cipher cipher = Cipher.getInstance(AES_ECB_PCKS5_CIPHER_CONFIG);
cipher.init(Cipher.ENCRYPT_MODE, key);
encryptedMessage = convertMessageToBase64(cipher.doFinal(message.getBytes(StandardCharsets.UTF_8)));
}
} catch (NoSuchAlgorithmException e) {
LOGGER.error(LogPreFix.ERROR + "No such algorithm [" + AES + "]", e);
} catch (NoSuchPaddingException e) {
LOGGER.error(LogPreFix.ERROR + "No such padding for algorithm [" + AES + "]", e);
} catch (IllegalBlockSizeException e) {
LOGGER.error(LogPreFix.ERROR + "Invalid block size for [" + AES + "/" + ECB_BLOCK + "]", e);
} catch (BadPaddingException e) {
LOGGER.error(LogPreFix.ERROR + "Invalid padding [" + PADDING + "]", e);
} catch (InvalidKeyException e) {
LOGGER.error("Invalid key [" + key + "]", e);
}
return encryptedMessage;
}
正在尝试使用此代码解密。我使用与加密完全相同的salt,并将加密程序创建的字符串作为“消息”传入
但我得到了这个错误,因为我使用的密码实例与加密它时使用的密码实例相同,我不确定为什么无法解密消息
javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:811)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:676)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:313)
at javax.crypto.Cipher.doFinal(Cipher.java:2087)
convertBase64ToMessage
不应返回字符串,而应返回字节[]
,因为密文不能由可打印字符串表示(概率很高)
javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:811)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:676)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:313)
at javax.crypto.Cipher.doFinal(Cipher.java:2087)