Heim >Backend-Entwicklung >Golang >Wie entschlüssele ich AES-verschlüsselten Text in Java und Scala angesichts der Golang-Verschlüsselung?

Wie entschlüssele ich AES-verschlüsselten Text in Java und Scala angesichts der Golang-Verschlüsselung?

Susan Sarandon
Susan SarandonOriginal
2024-10-26 07:55:30867Durchsuche

How to Decrypt AES-Encrypted Text in Java and Scala, Given Golang Encryption?

AES-Verschlüsselung in Golang und ihre Entschlüsselung in Java

Die in der Frage bereitgestellte Golang-Verschlüsselungsfunktion für AES verschlüsselt eine Zeichenfolge mithilfe des Advanced Encryption Standard (AES)-Algorithmus. Erstellen eines Geheimtextes in Base64-Kodierung. Um diesen Chiffretext in Java zu entschlüsseln, benötigen wir eine entsprechende Entschlüsselungsfunktion.

Java-Entschlüsselungsfunktion

<code class="java">import java.util.Base64;
import javax.crypto.*;
import javax.crypto.spec.*;

public class AESDecryption {

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

    public static void main(String[] args) {
        // Encryption result from the Go function.
        String base64Text = "c1bpFhxn74yzHQs-vgLcW6E5yL8zJfgceEQgYl0=";
        // The encryption key (same as in Go).
        byte[] key = "0123456789abcdef".getBytes();

        try {
            // Decrypt the ciphertext.
            String decrypted = decode(base64Text, key);
            // Print the decrypted text.
            System.out.println(decrypted);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}</code>

Scala-Entschlüsselungsfunktion

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

object AESDecryption {

  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), StandardCharsets.UTF_8)
  }

  def main(args: Array[String]): Unit = {
    // Encryption result from the Go function.
    val base64Text = "c1bpFhxn74yzHQs-vgLcW6E5yL8zJfgceEQgYl0="
    // The encryption key (same as in Go).
    val key = "0123456789abcdef"

    // Decrypt the ciphertext.
    val decrypted = decode(base64Text, key)
    // Print the decrypted text.
    println(decrypted)
  }
}</code>

Sowohl die Java- als auch die Scala-Entschlüsselung Funktionen nehmen den Chiffretext und den Schlüssel als Eingabe, entschlüsseln den Chiffretext mit dem AES/CFB/NoPadding-Algorithmus und geben den entschlüsselten Klartext als String zurück.

Das obige ist der detaillierte Inhalt vonWie entschlüssele ich AES-verschlüsselten Text in Java und Scala angesichts der Golang-Verschlüsselung?. 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