在没有用户交互的情况下使用pyme解密python中的PGP时出现问题

2024-05-23 22:16:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用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()

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

^{pr2}$

首先也是最重要的一点是,为什么密码回调不起作用?其次,如何防止程序在调用密码短语回调之前提示用户输入密码?在

这是在Ubuntu 10.04上运行的


Tags: incore程序消息密码readdatacallback
2条回答

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

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

效果非常好。在

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

相关问题 更多 >