Le chiffrement/déchiffrement Java via String ne fonctionne pas à cause du remplissage

Martin Rémy

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.

zaph

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.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  2. 2

    J'ai besoin de savoir si ces deux phrases sont les mêmes en programmation

  3. 3

    Microsoft.WebApplication.targets

  4. 4

    Création d'un nouvel objet d'une classe avec un nouveau nom en cliquant sur un bouton dans java swing

  5. 5

    La taille de la forme n'est pas égale à la taille de la cellule du tableau et ajuste le texte à l'intérieur de la forme

  6. 6

    Javascript indiquant "impossible de définir la propriété 'innerHTML' sur null"

  7. 7

    Pourquoi utiliser Asyncio ne réduit pas le temps d'exécution global en Python et n'exécute pas les fonctions simultanément?

  8. 8

    Création d'un rappel python pour une fonction C à partir d'une DLL avec un tampon char.

  9. 9

    Trouver l'intersection et l'union de deux rectangles

  10. 10

    Comment convertir une chaîne en tuple en utilisant `reads`?

  11. 11

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  12. 12

    Restauration de la sauvegarde de la base de données SQL Server sur la version inférieure

  13. 13

    Nextcloud avec Docker: impossible de créer ou d'écrire dans le répertoire de données

  14. 14

    Compter combien de fois un nombre apparaît dans un tableau aléatoire

  15. 15

    java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

  16. 16

    java.lang.NoClassDefFoundError: org / springframework / data / repository / config / BootstrapMode

  17. 17

    Créer un graphique à barres avec une fréquence relative / à partir d'un objet de table dans R

  18. 18

    comment le contrôle de tableau javascript devrait-il être

  19. 19

    Importation bizarre de Google Sheets importxml - Impossible d'obtenir le chemin correct vers les éléments

  20. 20

    Injecter des éléments dans une liste existante au printemps

  21. 21

    Placez le modeBar en haut au centre à l'aide de plotly.js

chaudétiquette

Archive