使用 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)
解决了我的问题。
我正在尝试创建一个可用于加密和解密文件的简单脚本。然而,使用什么密码短语似乎并不重要。例如:
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)
解决了我的问题。