使用文件中的密码解密GnuPG加密文件

时间:2016-06-27 08:24:31

标签: python gnupg

当我在python中编写status = gpg.decrypt_file(f, passphrase='password', output='output.txt')时。 我可以解密文件。

当我写password='password' status = gpg.decrypt_file(f, passphrase=password, output='output.txt')时 我也可以解密文件。

但是当我写作

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

我无法解密该文件,temppassword\r\n,因此password是密码'

谢谢。

1 个答案:

答案 0 :(得分:0)

  • 使用文本模式读取您知道的文本流。
  • 依靠文本输入流的“通用换行符”。
  • 使用字符串类型方法来处理字符串。
passphrase_infile_path = "lorem.txt"
with open(passphrase_infile_path, 'r') as passphrase_infile:
    passphrase_line = passphrase_infile.readline()
    passphrase = passphrase_line.rstrip('\n')

这样密码就行了,因为你只有那些没有换行符的字符。

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)

首先,请注意temp[0:len(temp)-2]更具惯用性地写为temp[:-2]

此表达式除了序列temp的最后两项外,其他所有项。

由于temp是一个字节序列,因此总是修剪该序列的最后两个字节。

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

这不是从输入线修剪掉线的可靠方法。

相反,在文本模式下打开文件,您将获得规范化的换行符和文本输入。然后,使用str内置方法按字符操作它。