Heim >Java >javaLernprogramm >Warum gelingt es meinem Java 3DES-Verschlüsselungs-/Entschlüsselungscode nicht, die kodierten Daten wieder in die ursprüngliche Zeichenfolge zu entschlüsseln, selbst nachdem die Base64-Kodierung und -Dekodierung entfernt wurde?

Warum gelingt es meinem Java 3DES-Verschlüsselungs-/Entschlüsselungscode nicht, die kodierten Daten wieder in die ursprüngliche Zeichenfolge zu entschlüsseln, selbst nachdem die Base64-Kodierung und -Dekodierung entfernt wurde?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-11 08:11:03359Durchsuche

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?

Wie verwende ich 3DES-Verschlüsselung/Entschlüsselung in Java ohne Base64-Kodierung?

Problem:

Der Java-Code eines Benutzers für die 3DES-Verschlüsselung und -Entschlüsselung gelingt es nicht, die kodierten Daten wieder in die ursprüngliche Zeichenfolge zu entschlüsseln. Trotz der Entfernung der Base64-Kodierung und -Dekodierung treten beim Code immer noch Probleme auf.

Lösung:

Bei der Überprüfung des bereitgestellten Codes scheint es, dass der Fehler möglicherweise nicht im Base64 liegt Kodierungs- oder Dekodierungsprozess, sondern vielmehr in der Handhabung der Byte-Array-Ausgabe des Verschlüsselungsprozesses.

Überarbeiteter Code:

Der folgende überarbeitete Code enthält geringfügige Bereinigungen und wird korrekt angezeigt „kyle boon“ als dekodierte Zeichenfolge:

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");
    }
}

Das obige ist der detaillierte Inhalt vonWarum gelingt es meinem Java 3DES-Verschlüsselungs-/Entschlüsselungscode nicht, die kodierten Daten wieder in die ursprüngliche Zeichenfolge zu entschlüsseln, selbst nachdem die Base64-Kodierung und -Dekodierung entfernt wurde?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn