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)
生成公钥,然后使用公钥进行签名。
_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)
不知道你这个问题是否已经解决, 如果还没有解决的话: