Maison > Java > javaDidacticiel > Pourquoi mon code de cryptage/déchiffrement Java 3DES ne parvient-il pas à déchiffrer les données codées jusqu'à la chaîne d'origine, même après avoir supprimé l'encodage et le décodage Base64 ?

Pourquoi mon code de cryptage/déchiffrement Java 3DES ne parvient-il pas à déchiffrer les données codées jusqu'à la chaîne d'origine, même après avoir supprimé l'encodage et le décodage Base64 ?

Mary-Kate Olsen
Libérer: 2024-11-11 08:11:03
original
364 Les gens l'ont consulté

Why does my Java 3DES encryption/decryption code fail to decrypt the encoded data back to the original string even after removing Base64 encoding and decoding?

Comment utiliser le cryptage/déchiffrement 3DES en Java sans encodage Base64 ?

Problème :

Le code Java d'un utilisateur pour le cryptage et le décryptage 3DES ne parvient pas à déchiffrer les données codées vers le chaîne originale. Malgré la suppression de l'encodage et du décodage Base64, le code rencontre toujours des problèmes.

Solution :

Après avoir examiné le code fourni, il semble que l'erreur ne réside peut-être pas dans le Base64. processus d'encodage ou de décodage mais plutôt dans la gestion du tableau d'octets produit par le processus de cryptage.

Révisé Code :

Le code révisé suivant inclut un nettoyage mineur et affiche correctement « kyle boon » comme chaîne décodée :

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(codedtext); // this is a byte array, you'll just see a reference to an array
        System.out.println(decodedtext); // This correctly shows "kyle boon"
    }

    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 < 8;) {
            keyBytes[k++] = keyBytes[j++];
        }

        final SecretKey key = new SecretKeySpec(keyBytes, "DESede");
        final IvParameterSpec iv = new IvParameterSpec(new byte[8]);
        final Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, key, iv);

        final byte[] plainTextBytes = message.getBytes("utf-8");
        final byte[] cipherText = cipher.doFinal(plainTextBytes);

        return cipherText;
    }

    public String decrypt(byte[] 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 < 8;) {
            keyBytes[k++] = keyBytes[j++];
        }

        final SecretKey key = new SecretKeySpec(keyBytes, "DESede");
        final IvParameterSpec iv = new IvParameterSpec(new byte[8]);
        final Cipher decipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
        decipher.init(Cipher.DECRYPT_MODE, key, iv);

        final byte[] plainText = decipher.doFinal(message);

        return new String(plainText, "UTF-8");
    }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal