使用 python-gnupg 时密码无关紧要

Passphrase does not matter when using python-gnupg

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

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)

encrypt.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)

decrypt.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 仍然设法解密文件,即使我们输入了错误的密码。有谁知道这是为什么?还有一个更好的问题:如何避免这种情况?

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' 中的最后一个零更改为您想要的任何值。

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

export GPG_TTY=$(tty)

解决了我的问题。