Goで暗号化されている場合にJavaでAES暗号化テキストを復号する方法?

DDD
リリース: 2024-10-26 16:57:30
オリジナル
815 人が閲覧しました

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 Decoder:

<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で暗号化されている場合にJavaでAES暗号化テキストを復号する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!