«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему не удается выполнить шифрование/дешифрование Java 3DES?

Почему не удается выполнить шифрование/дешифрование Java 3DES?

Опубликовано 24 ноября 2024 г.
Просматривать:771

Why Is My Java 3DES Encryption/Decryption Failing?

Устранение неполадок шифрования/дешифрования 3DES в Java

Проблема:

Невозможно успешно зашифровать и расшифровать строку с использованием шифрования 3DES из-за повторяющихся ошибок в коде реализация.

Решение:

Чтобы решить эту проблему, давайте проанализируем предоставленный код:

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

    // ...
}

Заблуждение о кодировании Base64:

Изначально код включал строку Final String encodedCipherText = new sun.misc.BASE64Encoder().encode(cipherText); для Base64, кодирующего зашифрованный текст перед его возвратом. Однако, поскольку в методе дешифрования не использовалась кодировка Base64, зашифрованный текст должен быть возвращен непосредственно в виде массива байтов.

Печать необработанных байтовых массивов:

код печатает как зашифрованные, так и расшифрованные данные в виде массивов байтов: System.out.println(codedtext); и System.out.println(декодированныйтекст);. Это не обеспечивает значимого вывода, поскольку массивы байтов не отображаются как удобочитаемые значения. Чтобы отобразить фактический расшифрованный текст, преобразуйте его в строку, используя new String(plainText, "UTF-8").

Исправленный код:

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 
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3