【问题标题】:Passphrase does not matter when using python-gnupg使用 python-gnupg 时密码短语无关紧要
【发布时间】:2021-07-14 13:47:44
【问题描述】:

我正在尝试创建一个可用于加密和解密文件的简单脚本。然而,使用什么密码似乎并不重要。举个例子:

gen_key.py

import gnupg
import os
gpg = gnupg.GPG(gnupghome='gnupg')

gpg.encoding = 'utf-8'

input_data = gpg.gen_key_input(
        name_email = 'test@test.com',
        passphrase = 'mypassphrase',
        key_type = 'RSA',
        key_length = 1024)

key = gpg.gen_key(input_data)

print(key)

加密.py

import gnupg
import os

gpg = gnupg.GPG(gnupghome = 'gnupg')

with open('test.txt', 'rb') as f:
        status = gpg.encrypt_file(f, recipients = ['test@test.com'], output='test.encrypted')

print(status.ok)

解密.py

import gnupg
import os

gpg = gnupg.GPG(gnupghome='gnupg')

with open('test.encrypted', 'rb') as f:
        status = gpg.decrypt_file(f, passphrase = 'wrongpassphrase', output = 'test2.txt')

print(status.ok)

请注意,我们在 decrypt.py 中使用了错误的密码。

但是,即使我们输入了错误的密码,decrypt.py 仍然可以解密文件。有谁知道这是为什么?还有一个更好的问题:如何避免这种情况?

【问题讨论】:

    标签: python encryption gnupg


    【解决方案1】:

    GPG 代理似乎是由 GPG 自动启动的,并将密码短语临时存储在内存中一段指定的时间。您可以在终端中使用此命令将其转为:

    echo 'max-cache-ttl:0:0' | GNUPGHOME="${GNUPGHOME:-path/to/directory}" gpgconf --change-options gpg-agent
    

    这将 gpg 代理应将密码在内存中保留的秒数设置为 0。如果您希望更改此值,可以将“max-cache-ttl:0:0”中的最后一个零更改为任何值你想要的。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。 在我的情况下,我没有被提示输入密码。 所以,运行

      export GPG_TTY=$(tty)
      

      解决了我的问题。

      【讨论】:

        猜你喜欢
        • 2016-12-02
        • 1970-01-01
        • 1970-01-01
        • 2015-09-07
        • 2015-10-29
        • 1970-01-01
        • 2015-07-07
        • 1970-01-01
        • 2010-09-27
        相关资源
        最近更新 更多