"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi mon cryptage/déchiffrement Java 3DES échoue-t-il ?

Pourquoi mon cryptage/déchiffrement Java 3DES échoue-t-il ?

Publié le 2024-11-24
Parcourir:741

Why Is My Java 3DES Encryption/Decryption Failing?

Dépannage du cryptage/déchiffrement 3DES en Java

Problème :

Impossible de crypter et déchiffrer correctement une chaîne à l'aide du cryptage 3DES en raison d'erreurs récurrentes dans le code mise en œuvre.

Solution :

Pour résoudre le problème, analysons le code fourni :

public class TripleDESTest {

    // ...

    public byte[] encrypt(String message) {
        // ...

        final byte[] plainTextBytes = message.getBytes("utf-8");
        final byte[] cipherText = cipher.doFinal(plainTextBytes);
        final String encodedCipherText = new sun.misc.BASE64Encoder().encode(cipherText);

        return cipherText;    
    }

    // ...
}

Idée fausse sur l'encodage Base64 :

Initialement, le code incluait la ligne finale String encodedCipherText = new sun.misc.BASE64Encoder().encode(cipherText); pour le codage Base64 du texte chiffré avant de le renvoyer. Cependant, comme le codage Base64 n'était pas utilisé dans la méthode de décryptage, le texte chiffré doit être renvoyé directement sous forme de tableau d'octets.

Impression de tableaux d'octets bruts :

Le code imprime les données chiffrées et déchiffrées sous forme de tableaux d'octets : System.out.println(codedtext); et System.out.println(decodedtext);. Cela ne fournit pas de sortie significative car les tableaux d'octets ne s'affichent pas sous forme de valeurs lisibles par l'homme. Pour afficher le texte réellement déchiffré, convertissez-le en chaîne à l'aide de new String(plainText, "UTF-8").

Code corrigé :

import java.security.MessageDigest;
import java.util.Arrays;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class TripleDESTest {

    public static void main(String[] args) throws Exception {

        String text = "kyle boon";

        byte[] codedtext = new TripleDESTest().encrypt(text);
        String decodedtext = new TripleDESTest().decrypt(codedtext);

        System.out.println(decodedtext);
    }

    public byte[] encrypt(String message) throws Exception {
        final MessageDigest md = MessageDigest.getInstance("md5");
        final byte[] digestOfPassword = md.digest("HG58YZ3CR9"
                .getBytes("utf-8"));
        final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
        for (int j = 0, k = 16; j 
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3