类似微信支付的签名和校验逻辑,保证数据准确性
import hashlib
#根据sign_key和关键字生成签名
def gen_sign(sign_key, **kwargs):
valid_keys = [k for k in kwargs if kwargs[k] and k != 'sign']
valid_keys.sort()
ostr = ''
for k in valid_keys:
ostr += '%s=%s&' % (k, kwargs[k])
ostr += '%s=%s' % ('key', sign_key)
if isinstance(str, unicode):
ostr = ostr.encode('utf-8')
sign = hashlib.md5(ostr).hexdigest().upper()
return sign
#核对签名
def check_sign(sign_key, **kwargs):
sign = gen_sign(sign_key, **kwargs)
return sign == kwargs.get('sign')