So entschlüsseln Sie eine mit dem OpenSSL-Befehl verschlüsselte Datei:
openssl aes-256-cbc -a -salt -in password.txt -out password.txt.enc mypass mypass
OpenSSL verwendet normalerweise eine bestimmte passwortbasierte Schlüsselableitungsmethode (EVP_BytesToKey) und kodiert den Chiffretext mit Base64. Der Pseudocode für den Prozess lautet wie folgt:
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))
Und der Entschlüsselungsprozess ist:
(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)
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) } } }
Das obige ist der detaillierte Inhalt vonWie entschlüssele ich eine mit OpenSSLs AES-256-CBC in Java verschlüsselte Datei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!