Heim > Java > javaLernprogramm > Warum schlägt meine Java 3DES-Verschlüsselung/Entschlüsselung fehl?

Warum schlägt meine Java 3DES-Verschlüsselung/Entschlüsselung fehl?

Mary-Kate Olsen
Freigeben: 2024-11-11 00:18:02
Original
540 Leute haben es durchsucht

Why Is My Java 3DES Encryption/Decryption Failing?

Fehlerbehebung bei der 3DES-Verschlüsselung/-Entschlüsselung in Java

Problem:

Eine Zeichenfolge konnte mit der 3DES-Verschlüsselung nicht erfolgreich ver- und entschlüsselt werden aufgrund wiederkehrender Fehler bei der Code-Implementierung.

Lösung:

Um das Problem zu beheben, analysieren wir den bereitgestellten Code:

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

    // ...
}
Nach dem Login kopieren

Base64-Kodierungsfehler:

Anfangs enthielt der Code die Zeile final String encodedCipherText = new sun.misc.BASE64Encoder().encode(cipherText); für Base64-Codierung des Chiffretextes vor der Rückgabe. Da jedoch bei der Entschlüsselungsmethode keine Base64-Kodierung verwendet wurde, sollte der Chiffretext direkt als Byte-Array zurückgegeben werden.

Rohbyte-Arrays drucken:

Die Code gibt sowohl die verschlüsselten als auch die entschlüsselten Daten als Byte-Arrays aus: System.out.println(codedtext); und System.out.println(decodedtext);. Dies liefert keine aussagekräftige Ausgabe, da Byte-Arrays nicht als für Menschen lesbare Werte dargestellt werden. Um den tatsächlichen entschlüsselten Text anzuzeigen, konvertieren Sie ihn mit new String(plainText, „UTF-8“) in einen String.

Korrigierter Code:

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 < 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");
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum schlägt meine Java 3DES-Verschlüsselung/Entschlüsselung fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage