2016-06-27 2 views
0

Lorsque j'écris status = gpg.decrypt_file(f, passphrase='password', output='output.txt') en python. Je peux déchiffrer le fichier. Lorsque j'écris password='password' status = gpg.decrypt_file(f, passphrase=password, output='output.txt') Je peux également décrypter le fichier.Utilisez le mot de passe dans le fichier pour décrypter le fichier crypté GnuPG

Mais quand j'écris

ff = open("4.txt",'rb') 
temp = ff.readline() 
password = temp[0:len(temp)-2] 
status = gpg.decrypt_file(f, passphrase=password, output='output.txt') 

Je ne peux pas déchiffrer le fichier en tant que temp est password\r\n, de sorte que le password est 'password'

Merci.

+1

Quelle est l'erreur que vous obtenez? – Rahul

+1

Avez-vous essayé 'temp = temp.rstrip ('\ r \ n')' pour supprimer le retour chariot et le retour à la ligne? – grooveplex

+1

Avez-vous revérifié que 'password' contient la bonne valeur? (Aussi, pourquoi utiliser 'rb' pour lire un fichier texte?) – usr2564301

Répondre

0
  • Utilisez le mode texte pour lire les flux dont vous savez qu'ils sont en texte.
  • Fiez-vous aux "nouvelles lignes universelles" des flux d'entrée de texte.
  • Utilisez des méthodes de type chaîne pour manipuler des chaînes de caractères.
passphrase_infile_path = "lorem.txt" 
with open(passphrase_infile_path, 'r') as passphrase_infile: 
    passphrase_line = passphrase_infile.readline() 
    passphrase = passphrase_line.rstrip('\n') 

De cette façon, le mot de passe devrait fonctionner, parce que vous avez juste ces personnages sans le saut de ligne.

import gnupg 

gpg = gnupg.GPG() 
crypto_infile_path = "ipsum.gpg" 
plaintext_outfile_path = "dolor.txt" 
with open(crypto_infile_path, 'rb') as crypto_infile: 
    status = gpg.decrypt_file(
      crypto_infile, 
      passphrase=passphrase, 
      output=plaintext_outfile_path) 

D'abord, notez que temp[0:len(temp)-2] est plus idiomatiques écrit comme temp[:-2].

Cette expression obtient tout sauf les deux derniers éléments de la séquence temp.

Puisque temp est une séquence d'octets, vous toujours couper les deux derniers octets de cette séquence.

>>> line = b'rabbit\r\n' 
>>> line[:-2] 
'rabbit' 
>>> line = b'rabbit\n' 
>>> line[:-2] 
'rabbi' 

Ce n'est pas la manière fiable de couper le saut de ligne d'une ligne d'entrée. Au lieu de cela, ouvrez le fichier en mode texte, et vous obtiendrez des sauts de ligne et des entrées de texte normalisés. Ensuite, utilisez les méthodes intégrées str pour le manipuler par des caractères.