代码之家  ›  专栏  ›  技术社区  ›  sberry

python-pyme:无需用户交互的简单解密

  •  0
  • sberry  · 技术社区  · 15 年前

    我正在使用pyme与gpgme接口,并且在签名/加密方面没有任何问题。但是,当我尝试解密时,尽管通过 c.set_passphrase_cb 回调。我做错什么了吗?

    2 回复  |  直到 13 年前
        1
  •  0
  •   anonymous coward    14 年前

    在设置密码回拨之前添加“c.set_Armor(1)”。

        2
  •  1
  •   Yan    15 年前

    我也有类似的问题。 我的代码如下:

    def passphrase_回调(hint='',desc='',prev_bad=''): 返回“密码”

    类密码引擎: NoSignKeys类(异常): DEF 初始化 (自我,STR): 例外。 初始化 (自我,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()
    

    尽管设置了密码回拨,我还是收到一个消息框,询问 密码短语或只是一个通知错误密码的异常。 有人能解决这个问题并分享他的知识吗? 谢谢, 雁鸣声

    推荐文章