这段代码一直返回false,改怎么修改


    def _verify(self, raw_content, signature):
        # 开始计算签名
        key = self.alipay_public_key
        signer = PKCS1_v1_5.new(key)
        digest = SHA256.new()
        digest.update(raw_content.encode("utf8"))
        if signer.verify(digest, base64.decodebytes(signature.encode("utf8"))):
            return True
        return False

    def verify(self, data, signature):
        if "sign_type" in data:
            sign_type = data.pop("sign_type")
        # 排序后的字符串
        unsigned_items = self.ordered_data(data)
        message = "&".join(u"{}={}".format(k, v) for k, v in unsigned_items)

        return self._verify(message, signature)

这段代码一直返回false,该怎么修改

1.self.alipay_public_key 是一个私钥,不能直接用于签名。需要先使用 PKCS1_v1_5.new(key) 生成公钥,然后使用公钥进行签名。

  1. _verify 函数中,base64.decodebytes(signature.encode("utf8"))signature 转换为 Base64 编码的字符串,但是 signature 的长度不能超过 signature.length 的限制。因此,需要先将 signature 转换为字节串,然后再进行 Base64 编码。
def _verify(self, raw_content, signature):
    # 开始计算签名
    key = self.alipay_public_key
    signer = PKCS1_v1_5.new(key)
    digest = SHA256.new()
    digest.update(raw_content.encode("utf8"))
    if signer.verify(digest, base64.decodebytes(signature)):
        return True
    return False
def verify(self, data, signature):
    if "sign_type" in data:
        sign_type = data.pop("sign_type")
    # 排序后的字符串
    unsigned_items = self.ordered_data(data)
    message = "&".join(u"{}={}".format(k, v) for k, v in unsigned_items)
    return self._verify(message, signature)

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^