0

我正在尝试使用 pyme(来自 gpgme 的 python 包装器)解密消息。如果我在提示时输入密码,它工作正常,但我无法让密码回调工作。这是代码

import pyme.core

def Callback( x, y, z ):
    print 'in passphrase callback'
 return 'passphrase'

plain = pyme.core.Data()
cipher = pyme.core.Data(sys.stdin.read())
c = pyme.core.Context()
c.set_armor(1)
c.set_passphrase_cb(Callback)
c.op_decrypt( cipher, plain )
plain.seek(0,0)
print plain.read()

当我运行它并且不以交互方式提供密码时,程序会尝试“在密码回调中”进行回调打印,但随后失败并出现错误:

pyme.errors.GPGMEError: Invocation of gpgme_op_decrypt: Unspecified source: General error (0,1)

首先,为什么密码回调不起作用?其次,如何防止程序在调用密码回调之前提示用户输入密码?

这是在 Ubuntu 10.04 上运行的

4

2 回答 2

2

显然,您需要解释关键字hook

   def Callback( x, y, z, hook=None):
   ...

效果很好。

于 2011-10-29T14:00:39.347 回答
0

我可以通过None从密码回调返回来重现您报告的错误。如果Python 函数在没有到达语句None的情况下到达执行函数的末尾,则默认返回。return您是否有可能意外地None从回调中返回,可能是由于您的代码错误地提前结束了您的函数?(错误缩进的想法只是基于您示例中的非法缩进的猜测。)

于 2010-09-19T09:58:50.287 回答