Heim >Java >javaLernprogramm >Wie entschlüssele ich OpenSSL-verschlüsselte Dateien in Java mit AES?
OpenSSL-verschlüsselte Dateien mit JAVA mit AES entschlüsseln
Unter UNIX können Sie Dateien mit dem folgenden OpenSSL-Befehl verschlüsseln:
openssl aes-256-cbc -a -salt -in password.txt -out password.txt.enc
Um diese Datei in JAVA zu entschlüsseln, können Sie den genauen UNIX-Befehl nicht replizieren. Stattdessen müssen Sie einen anderen, aber funktionalen Ansatz zur Entschlüsselung verfolgen.
JAVA-Implementierung
Unten finden Sie einen Java-Codeausschnitt, der zeigt, wie eine mit OpenSSL verschlüsselte Datei entschlüsselt wird AES:
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) { ... // Parse command-line arguments File f = new File(args[ARG_INDEX_FILENAME]); // Read and decode base 64 encoded file String dataBase64 = new String(Files.readAllBytes(f.toPath()), ASCII); byte[] headerSaltAndCipherText = Base64.decode(dataBase64); ... // Decrypt the file using the provided password and encryption parameters byte[] decrypted = aesCBC.doFinal(encrypted); // Convert decrypted bytes to a string and print the result String answer = new String(decrypted, ASCII); System.out.println(answer); } }
Dieser Code nutzt die EVP_BytesToKey-Methode, um Verschlüsselungsschlüssel abzuleiten und Initialisierungsvektoren (IVs) basierend auf dem angegebenen Passwort. Die Cipher-Klasse wird dann verwendet, um die AES-Entschlüsselung mit CBC-Modus und PKCS5-Padding durchzuführen.
Zusätzliche Hinweise
Das obige ist der detaillierte Inhalt vonWie entschlüssele ich OpenSSL-verschlüsselte Dateien in Java mit AES?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!