> Java > java지도 시간 > Base64 인코딩 및 디코딩을 제거한 후에도 Java 3DES 암호화/해독 코드가 인코딩된 데이터를 원래 문자열로 다시 해독하지 못하는 이유는 무엇입니까?

Base64 인코딩 및 디코딩을 제거한 후에도 Java 3DES 암호화/해독 코드가 인코딩된 데이터를 원래 문자열로 다시 해독하지 못하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-11 08:11:03
원래의
336명이 탐색했습니다.

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?

Base64 인코딩 없이 Java에서 3DES 암호화/복호화를 어떻게 사용합니까?

문제:

3DES 암호화 및 암호 해독을 위한 사용자의 Java 코드가 인코딩된 데이터를 원래 문자열로 다시 해독하지 못합니다. Base64 인코딩 및 디코딩을 제거했음에도 불구하고 코드에 여전히 문제가 발생합니다.

해결책:

제공된 코드를 검토한 결과 오류가 Base64에 있지 않을 수 있는 것으로 보입니다. 인코딩 또는 디코딩 프로세스가 아니라 암호화 프로세스의 바이트 배열 출력을 처리하는 것입니다.

수정된 코드:

다음 수정된 코드에는 사소한 정리가 포함되어 있으며 올바르게 표시됩니다. "kyle boon"을 디코딩된 문자열로 사용:

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");
    }
}
로그인 후 복사

위 내용은 Base64 인코딩 및 디코딩을 제거한 후에도 Java 3DES 암호화/해독 코드가 인코딩된 데이터를 원래 문자열로 다시 해독하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿