Pour décrypter un fichier crypté à l'aide de la commande OpenSSL :
openssl aes-256-cbc -a -salt -in password.txt -out password.txt.enc mypass mypass
OpenSSL utilise généralement une méthode spécifique de dérivation de clé basée sur un mot de passe (EVP_BytesToKey) et code en base64 le texte chiffré. Le pseudocode du processus est le suivant :
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))
Et le processus de décryptage est :
(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) } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!