ホームページ > Java > &#&チュートリアル > Java で OpenSSL の AES-256-CBC で暗号化されたファイルを復号化する方法

Java で OpenSSL の AES-256-CBC で暗号化されたファイルを復号化する方法

Patricia Arquette
リリース: 2024-12-14 04:44:09
オリジナル
545 人が閲覧しました

How to Decrypt a File Encrypted with OpenSSL's AES-256-CBC in Java?

Java で OpenSSL の AES-256-CBC アルゴリズムで暗号化されたファイルを復号化する

問題の説明

OpenSSL コマンドを使用して暗号化されたファイルを復号化するには、次の手順を実行します。

openssl aes-256-cbc -a -salt -in password.txt -out password.txt.enc
mypass
mypass
ログイン後にコピー

OpenSSL の暗号化プロセス

OpenSSL は通常、特定のパスワードベースのキー導出方法 (EVP_BytesToKey) を採用し、暗号文を Base64 でエンコードします。このプロセスの疑似コードは次のとおりです。

salt = random(8)
keyAndIV = BytesToKey(password, salt, 48)
key = keyAndIV[0..31]
iv = keyAndIV[32..47]
ct = AES-256-CBC-encrypt(key, iv, plaintext)
res = base64MimeEncode("Salted__" | salt | ct))
ログイン後にコピー

復号化プロセスは次のとおりです。

(salt, ct) = base64MimeDecode(res)
keyAndIV = BytesToKey(password, salt, 48)
key = keyAndIV[0..31]
iv = keyAndIV[32..47]
pt = AES-256-CBC-decrypt(key, iv, plaintext)
ログイン後にコピー

Java 実装

import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.security.GeneralSecurityException;
import java.security.MessageDigest;
import java.util.Arrays;
import java.util.List;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import org.bouncycastle.util.encoders.Base64;

public class OpenSSLDecryptor {
    private static final Charset ASCII = Charset.forName("ASCII");
    private static final int INDEX_KEY = 0;
    private static final int INDEX_IV = 1;
    private static final int ITERATIONS = 1;

    private static final int ARG_INDEX_FILENAME = 0;
    private static final int ARG_INDEX_PASSWORD = 1;

    private static final int SALT_OFFSET = 8;
    private static final int SALT_SIZE = 8;
    private static final int CIPHERTEXT_OFFSET = SALT_OFFSET + SALT_SIZE;

    private static final int KEY_SIZE_BITS = 256;

    public static void main(String[] args) {
        try {
            // ... (Same code as provided in the reference answer)
        } catch (Exception e) {
            // ... (Same catch blocks as provided in the reference answer)
        }
    }
}
ログイン後にコピー

考慮事項

  • コードは文字セットとして ASCII を想定しています。特定の要件に基づいて調整されます。
  • セキュリティを強化するには、カスタム PBKDF2 実装の使用が推奨されます。
  • コード内の MD5 ダイジェストの選択は、SHA-256 に置き換えるか、明示的に指定する必要があります。互換性の問題を回避するために OpenSSL コマンドに使用します。

以上がJava で OpenSSL の AES-256-CBC で暗号化されたファイルを復号化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート