Décrypter les fichiers cryptés avec OpenSSL avec Python 3

Comment décrypter un fichier crypté OpenSSL à l'aide de Python3.

C'est une situation qui semble assez probable, mais quand il s'agit de déchiffrer et de crypter des fichiers, il y a peu de documents et j'ai eu un petit problème, j'ai donc pris une note.

L'environnement de développement est le suivant. ・ Python 3.7.3 ・ Windows10 ・ Installez les packages nécessaires avec pip install à tout moment

L'importation est écrite comme ceci. (Exemple)

import binascii
import io
from hashlib import sha256
from Crypto.Cipher import AES
from Crypto import Random

Décryptage des fichiers cryptés avec OpenSSL

@classmethod
def decrypt(self,infile, expf, key_length=32):
    """
    Decrypt the file.

    Parameters
    ----------
    infile : string
        File path before decryption
    expf : string
        File path after decryption
    key_length : int
        key_length

    Returns
        None
    -------
    """

    # Divide password hashed by sha256 to first half  and second half ,set to key and iv. This is OpenSSL specifications.
    key = binascii.unhexlify('E1B85B27D6BCB05846C18E6A48F118E8')
    iv = binascii.unhexlify('9F0C0587140DE9FB3359F8370D0DBA08')

    in_file  = open( infile , 'rb' )
    out_file = open( expf , 'wb' )

    bs = AES.block_size

    cipher = AES.new(self.key, AES.MODE_CBC, self.iv)
    next_chunk = ''
    finished = False
    while not finished:
        chunk, next_chunk = next_chunk, cipher.decrypt(in_file.read(1024 * bs))
        if len(next_chunk) == 0:
            padding_length = chunk[-1]
            chunk = chunk[:-padding_length]
            finished = True

        if type(chunk) is str:
            wk = chunk.encode('utf-8')
        elif type(chunk) is bytes:
            wk = chunk
        else:
            wk = chunk
    
        out_file.write(wk)

    # file close
    in_file.close()
    out_file.close()


Cette fois, il est crypté.

Crypter les fichiers avec la méthode OpenSSL


@classmethod
def encrypt(self,in_file, out_file,  key_length=32):
    """
    Encrypt the file.

    Parameters
    ----------
    in_file : string
        File path before encryption
    out_file : string
        File path before encryption
    key_length : int
        key_length
    Returns
        None
    -------
    """

    # Divide password hashed by sha256 to first half  and second half ,set to key and iv. This is OpenSSL specifications.
    key = binascii.unhexlify('E1B85B27D6BCB05846C18E6A48F118E8')
    iv = binascii.unhexlify('9F0C0587140DE9FB3359F8370D0DBA08')

    in_file  = open( in_file , 'rb' )
    out_file = open( out_file , 'wb' )

    bs = AES.block_size

    cipher = AES.new(self.key, AES.MODE_CBC, self.iv)

    finished = False
    while not finished:
        chunk = in_file.read(1024 * bs)
        if len(chunk) == 0 or len(chunk) % bs != 0:
            padding_length = (bs - len(chunk) % bs) or bs
            chunk += padding_length * bytes([padding_length])
            finished = True
        out_file.write(cipher.encrypt(chunk))
    
    # file close
    in_file.close()
    out_file.close()

Recommended Posts

Décrypter les fichiers cryptés avec OpenSSL avec Python 3
Décrypter les fichiers cryptés avec openssl depuis python avec openssl
Décrypter une chaîne chiffrée sur iOS avec Python
Tri des fichiers image avec Python (2)
Trier de gros fichiers avec python
Tri des fichiers image avec Python (3)
Tri des fichiers image avec Python
Intégrez des fichiers PDF avec Python
Lire des fichiers .txt avec Python
Extraire récursivement des fichiers zip avec python
Manipulation des fichiers EAGLE .brd avec Python
[Python] Fichiers wav POST avec requêtes [POST]
Décrypter le code OpenSSL AES-256-CBC avec PyCrypto
Gérer les fichiers Excel CSV avec Python
Lire des fichiers en parallèle avec Python
[AWS] Utilisation de fichiers ini avec Lambda [Python]
Lire un fichier audio à partir de Python avec interruption
Créer et décrypter du code César avec python
Lire et écrire des fichiers JSON avec Python
Télécharger des fichiers sur le Web avec Python
[Easy Python] Lecture de fichiers Excel avec openpyxl
Crypter avec Ruby (Rails) et décrypter avec Python
[Easy Python] Lecture de fichiers Excel avec des pandas
FizzBuzz en Python3
Grattage avec Python
Statistiques avec python
Grattage avec Python
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
[Python] Récupérez les fichiers dans le dossier avec Python
Gérer les fichiers zip avec des noms de fichiers japonais dans Python 3
Faites glisser et déposez un fichier local avec Selenium (Python)
Encodage de caractères lors du traitement de fichiers en Python 3
Télécharger des fichiers sur Google Drive avec Lambda (Python)
La lecture et l'écriture s'adaptent aux fichiers avec Python (mémo)
Convertissez plusieurs fichiers proto à la fois avec python
Lire les fichiers wav avec uniquement le package standard Python
Communication série avec Python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Python avec eclipse + PyDev.
Communication de socket avec Python
Analyse de données avec python 2
Télécharger des fichiers avec Django
Grattage en Python (préparation)
Essayez de gratter avec Python.
Extraire le tableau des fichiers image avec OneDrive et Python
Apprendre Python avec ChemTHEATER 03
"Orienté objet" appris avec python