Maison > Java > javaDidacticiel > Comment décrypter des fichiers cryptés par OpenSSL en Java à l'aide d'AES ?

Comment décrypter des fichiers cryptés par OpenSSL en Java à l'aide d'AES ?

Barbara Streisand
Libérer: 2024-12-03 08:42:11
original
200 Les gens l'ont consulté

How to Decrypt OpenSSL-Encrypted Files in Java using AES?

Déchiffrement des fichiers cryptés par OpenSSL à l'aide de JAVA avec AES

Sous UNIX, vous pouvez crypter des fichiers à l'aide de la commande OpenSSL suivante :

openssl aes-256-cbc -a -salt -in password.txt -out password.txt.enc
Copier après la connexion

Pour décrypter ce fichier en JAVA, vous ne pouvez pas répliquer la commande UNIX exacte. Au lieu de cela, vous devez suivre une approche différente mais fonctionnelle du décryptage.

Implémentation JAVA

Vous trouverez ci-dessous un extrait de code Java qui montre comment décrypter un fichier crypté par OpenSSL à l'aide de 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);
    }
}
Copier après la connexion

Ce code exploite la méthode EVP_BytesToKey pour dériver les clés de chiffrement et vecteurs d'initialisation (IV) basés sur le mot de passe donné. La classe Cipher est ensuite utilisée pour effectuer le déchiffrement AES avec le mode CBC et le remplissage PKCS5.

Notes supplémentaires

  • Attention aux jeux de caractères : Assurez-vous que le code utilise le même jeu de caractères spécifié dans la commande OpenSSL (ASCII dans ce cas). cas).
  • Considérez le PBKDF2 approuvé par le NIST : Il est plus sécurisé que la méthode de dérivation de mot de passe OpenSSL par défaut.
  • Soyez attentif aux modifications de l'algorithme de résumé : Les versions OpenSSL peuvent utiliser différents algorithmes de résumé, donc spécifiez le résumé explicitement dans l'interface de ligne de commande et dans Java. code.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal