Je dois encoder une chaîne en utilisant AES/ECB/PKCS5Padding. Le résultat chiffré ( new String(encryptedResult) car ils ne veulent pas d'octets) est ensuite envoyé à un partenaire. Mon partenaire déchiffre ensuite la chaîne à l'aide de getBytes().
Voici la méthode de décryptage :
public static String decrypter(final String donnees) throws NoSuchAlgorithmException, NoSuchPaddingException,
InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key);
return new String(cipher.doFinal(donnees.getBytes()));
}
Mon problème est que j'obtiens cette erreur lorsque j'essaie de déchiffrer : La longueur d'entrée doit être un multiple de 16 lors du déchiffrement avec un chiffrement rembourré.
Lorsque je décode des octets directement, cela fonctionne très bien. Comment puis-je faire en sorte que string.getBytes() ne perde pas le remplissage ? Ou d'autres solutions ?
Je ne peux pas changer l'algorithme de cryptage, et la même chose peut être dite à propos de la chaîne et non des octets envoyés au partenaire.
Une erreur de remplissage signifie généralement que le déchiffrement a échoué et que les échecs peuvent inclure une clé, des données et des encodages incorrects. Un déchiffrement incorrect a pour effet secondaire de produire également un remplissage incorrect.
Dans ce cas, il s'agit d'un encodage incorrect des données cryptées. Si vous avez besoin des données chiffrées sous forme de chaîne, la méthode générale consiste à utiliser le codage Base64 ou hexadécimal.
Ce code est incorrect : new String(cipher.doFinal(donnees.getBytes()));
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots