2017-10-04 1 views
1

J'essaie d'utiliser un sous-processus pour exécuter une commande openssl via un script python pour déchiffrer un fichier déjà chiffré avec le mot de passe connu.Python: Utilisation d'openssl via un sous-processus pour décrypter avec un mot de passe variable

Le code que j'ai fonctionne, mais je veux être en mesure d'enregistrer un mot de passe en tant que variable, à savoir pass = 'password' et entrer cette variable dans l'appel de sous-processus plutôt que l'avoir statiquement pass:password. Sans se soucier de la façon dont j'obtiens le mot de passe sauvegardé dans la variable, et en me concentrant simplement sur le passage en tant que variable à l'appel du sous-processus, est-ce possible? Je lisais la section PASS PHRASE ARGUEMENTS de la page de manuel OpenSSL, donc je suis curieux de savoir si je devrais utiliser l'une des autres options (env:var, file:pathname, fd:number, or stdin). Cependant, il est difficile de trouver des exemples d'utilisation, donc je ne suis pas sûr.

Voici ce que j'ai jusqu'à présent:

def decryptfile(): 
decryptFile = subprocess.Popen(["openssl", "aes-256-cbc", "-d", "-a", "-in", "pw.txt", 
           "-out", "pw.dec.txt", "-pass", "pass:password"] 
) 

Répondre

0

J'ai travaillé avec python depuis un certain temps maintenant, et je sais comment stocker sortie du module de sous-processus dans une variable définie par l'utilisateur comme suit

En ce qui concerne l'obtention du mot de passe en tant que variable, essayez de diviser les données de la sortie du sous-processus (maintenant stockée dans une variable) en une liste. Vous pouvez également mettre cette liste en forme selon vos besoins. Vous pouvez définir une variable de mot de passe avec une valeur équivalente à une valeur à l'intérieur de cette liste par l'indexation qui répertorie les valeurs, par exemple:

hello = subprocess.getoutput("echo hello") 
list_hello = list(hello) 
# print the index value of 1 to return hello 
# use string interpolation 
print("Second value in subprocess call is : {}".format(list_hello[1])) 
# store the value of "hello" in "echo hello" 
# to a variable 
hello_str = str(list_hello[1]) 
# you should cast the variable to a string 
# data type just to be safe 
print("The value of hello_str is: {}".format(hello_str)) 
+0

Ce n'est pas exactement ce que je voulais, je vais essayer de mieux le clarifier. Je dois pouvoir entrer une variable déjà définie dans l'appel du sous-processus lui-même, c'est-à-dire au lieu d'utiliser 'pass: password' il utilise ma variable et n'attend pas que je tape le mot de passe dans le terminal. Le truc sur le stockage de la sortie va certainement être utile plus tard dans mon programme si – Brosta

0

Utilisez l'interpolation de chaîne

value = "my_value" 
subprocess.call("commands {}".format(value), shell=True) 

Utilisez cette méthode d'interpolation de chaîne pour appeler/inclure votre variable avec votre commande ssl (mot de passe)

+0

Hope that helps, ou au moins vous indique dans la bonne direction – user8628164

+0

Merci, je vais essayer de travailler dans ce moment et vous faire savoir comment ça se passe ! – Brosta