>  기사  >  백엔드 개발  >  Go에서 암호화된 AES 암호화 텍스트를 Java에서 어떻게 해독합니까?

Go에서 암호화된 AES 암호화 텍스트를 Java에서 어떻게 해독합니까?

DDD
DDD원래의
2024-10-26 16:57:30817검색

How to Decrypt AES-Encrypted Text in Java When Encrypted in Go?

Go의 AES 암호화 및 Java의 암호 해독

질문:

Go에서 AES를 사용하여 텍스트를 성공적으로 암호화했습니다. 그러나 Java에서 암호화된 텍스트를 해독하는 데 어려움이 있습니다. Java 암호 해독 흐름과 작동하는 Java 디코더를 이해하는 데 도움을 줄 수 있습니까?

답변:

Java 디코더:

<code class="java">import java.nio.charset.StandardCharsets;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Base64;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.IvParameterSpec;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKeySpec;

public class AesDecrypter {

    public static String decode(String base64Text, byte[] key) throws NoSuchPaddingException, NoSuchAlgorithmException,
            InvalidAlgorithmParameterException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {

        byte[] inputArr = Base64.getUrlDecoder().decode(base64Text);
        SecretKeySpec skSpec = new SecretKeySpec(key, "AES");
        Cipher cipher = Cipher.getInstance("AES/CFB/NoPadding");
        int blockSize = cipher.getBlockSize();
        IvParameterSpec iv = new IvParameterSpec(Arrays.copyOf(inputArr, blockSize));
        byte[] dataToDecrypt = Arrays.copyOfRange(inputArr, blockSize, inputArr.length);
        cipher.init(Cipher.DECRYPT_MODE, skSpec, iv);
        byte[] result = cipher.doFinal(dataToDecrypt);
        return new String(result, StandardCharsets.UTF_8);
    }

}</code>

Scala 디코더:

<code class="scala">import java.nio.charset.StandardCharsets
import javax.crypto._
import java.security.spec.IvParameterSpec
import java.security.spec.SecretKeySpec
import java.util.Base64

object AesDecrypter {
  def decode(input:String, key:String): String = {
    val cipher = Cipher.getInstance("AES/CFB/NoPadding")
    val blockSize = cipher.getBlockSize()
    val keyBytes = key.getBytes()
    val inputArr = Base64.getUrlDecoder().decode(input)
    val skSpec = new SecretKeySpec(keyBytes, "AES")
    val iv = new IvParameterSpec(inputArr.slice(0, blockSize).toArray)
    val dataToDecrypt = inputArr.slice(blockSize, inputArr.size)
    cipher.init(Cipher.DECRYPT_MODE, skSpec, iv)
    new String(cipher.doFinal(dataToDecrypt.toArray))
  }
}</code>

데모:

시연을 위해 문자열 "test text 123"을 다음과 같이 인코딩해 보겠습니다. Go로 작성된 암호화 함수를 Java(또는 Scala)로 작성된 복호화 함수로 디코딩합니다.

// Go encoder
key := []byte("0123456789abcdef")
text := "test text 123"
encryptedText := encrypt(key, text)
println(encryptedText) // prints c1bpFhxn74yzHQs-vgLcW6E5yL8zJfgceEQgYl0=

// Java decoder
byte[] keyBytes = "0123456789abcdef".getBytes();
String decodedText = AesDecrypter.decode(encryptedText, keyBytes);
System.out.println(decodedText); // prints test text 123

// Scala decoder
val decodedText = AesDecrypter.decode(encryptedText, "0123456789abcdef")
println(decodedText) // prints test text 123

위 내용은 Go에서 암호화된 AES 암호화 텍스트를 Java에서 어떻게 해독합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.