Python Pyme: 无需用户交互的简单解密

0 投票
2 回答
1082 浏览
提问于 2025-04-15 13:39

我正在使用Pyme来和GPGME进行交互,签名和加密都没有问题。但是,当我尝试解密时,总是会弹出输入密码的提示,尽管我已经通过c.set_passphrase_cb这个回调函数设置了密码。难道我做错了什么吗?

2 个回答

1

我遇到了类似的问题。我的代码是这样的:

def passphrase_callback(hint='', desc='', prev_bad=''): return 'password'

class CryptoEngine: class NoSignKeys(Exception): def init(self, str): Exception.init(self, str)

def __init__(self, user_id, passphrase):
    "Initialize with ID (e-mail)"
    self.user_id = user_id
    self.passphrase = passphrase
def verify(self, data):
    c = core.Context()
    sig = core.Data(string = data)
    file = None
    plain = core.Data()
    c.op_verify(sig, file, plain)
    result = c.op_verify_result()
    plain.seek(0, 0)
    plaintext = plain.read()
    sig = result.signatures
    status = False
    for s in sig:
        status = (s.status == 0)
    return status, plaintext

def sign(self, data):
    c = core.Context()
    for sigkey in c.op_keylist_all(self.user_id, 1):
        if sigkey.can_sign:
            c.signers_add(sigkey)
    if not c.signers_enum(0):
        raise CryptoEngine.NoSignKeys("No secret %s's keys suitable for signing" % self.user_id)

    plain = core.Data(data)
    sig = core.Data()
    c.set_passphrase_cb(passphrase_callback)
    c.op_sign(plain, sig, mode.CLEAR)
    sig.seek(0, 0)
    return sig.read()

尽管我设置了密码提示回调,但我仍然会看到一个弹出框要求输入密码,或者只是收到一个异常提示,告诉我密码不正确。有没有人解决过这个问题,可以分享一下经验吗?谢谢,Yan

0

在你设置密码回调之前,先加上 "c.set_armor(1)" 这一行。

撰写回答