Rumah > Java > javaTutorial > Bagaimana untuk Menyahsulit Fail yang Disulitkan dengan AES-256-CBC OpenSSL di Java?

Bagaimana untuk Menyahsulit Fail yang Disulitkan dengan AES-256-CBC OpenSSL di Java?

Patricia Arquette
Lepaskan: 2024-12-14 04:44:09
asal
544 orang telah melayarinya

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

Menyahsulit Fail yang Disulitkan dengan Algoritma AES-256-CBC OpenSSL dalam Java

Pernyataan Masalah

Untuk menyahsulit fail yang disulitkan menggunakan arahan OpenSSL:

openssl aes-256-cbc -a -salt -in password.txt -out password.txt.enc
mypass
mypass
Salin selepas log masuk

Penyulitan OpenSSL Proses

OpenSSL biasanya menggunakan kaedah terbitan kunci berasaskan kata laluan tertentu (EVP_BytesToKey) dan base64-mengekodkan teks sifir. Pseudokod untuk proses tersebut adalah seperti berikut:

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))
Salin selepas log masuk

Dan proses penyahsulitan ialah:

(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)
Salin selepas log masuk

Pelaksanaan 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)
        }
    }
}
Salin selepas log masuk

Pertimbangan

  • Kod tersebut menganggap ASCII sebagai set aksara, yang mungkin perlu dilaraskan berdasarkan mengenai keperluan khusus.
  • Penggunaan pelaksanaan PBKDF2 tersuai dicadangkan untuk keselamatan yang dipertingkatkan.
  • Pilihan ringkasan MD5 dalam kod hendaklah digantikan dengan SHA-256 atau dinyatakan secara eksplisit dalam OpenSSL arahan untuk mengelakkan isu keserasian.

Atas ialah kandungan terperinci Bagaimana untuk Menyahsulit Fail yang Disulitkan dengan AES-256-CBC OpenSSL di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan