PHP版签名算法:
/** * 生成签名 * ------------------------------------------------------------- * @param array $params 签名参数 * @param striing $token 签名私钥 * @return string * @todo * ------------------------------------------------------------- * 例如:将函数assemble得到的字符串md5加密,然后转为大写,尾部连接密钥$token组成新的字符串,再md5,结果再转为大写 */ function gen_matrix_sign($params,$token){ return strtoupper(md5(strtoupper(md5(assemble($params))).$token)); } /** * 组合签名参数 * ------------------------------------------------------------- * @param array $params 签名参数 * @return string * @todo * ------------------------------------------------------------- * 根据参数名称将你的所有请求参数按照字母先后顺序排序: * key + value .... key + value 对除签名和图片外的所有请求参数按key做的升序排列, value无需编码。 * 例如: * 将foo=1,bar=2,baz=3 排序为bar=2,baz=3,foo=1 参数名和参数值链接后,得到拼装字符串bar2baz3foo1 * ------------------------------------------------------------- */ function assemble($params) { if(!is_array($params)){ return null; } ksort($params,SORT_STRING); $sign = ''; foreach($params AS $key=>$val){ $sign .= $key . (is_array($val) ? assemble($val) : $val); } return $sign; }
# -*- coding: UTF-8 -*- import hashlib def md5(key): """"""""""""""""""""""""""""""""""""""" # 生成md5加密串 # # @param string key 待加密字符串 # @return string 已加密字符串 # @todo """"""""""""""""""""""""""""""""""""""" hash = hashlib.md5() hash.update(key) return hash.hexdigest() def ksort(data,rev=False): """"""""""""""""""""""""""""""""""""""" # 对字典/列表按照键名排序 # # @param dict/list data 字典/列表对象 # @param bool rev 反向排序 # @return list each item is a tuple that contains (key,value) # @todo """"""""""""""""""""""""""""""""""""""" return sorted(enumerate(data) if isinstance(data,list) else data.items(),key=lambda x:x[0],reverse=rev) def assemble(params): """""""""""""""""""""""""""""""""""""""""""""""" # 组合签名参数 # # @param dict/list params # @return str # @todo """""""""""""""""""""""""""""""""""""""""""""""" sort_params = ksort(params) sign_str = '' for k,v in sort_params: sign_str += '%s%s' % (k,assemble(v) if isinstance(v,(dict,list)) else v) return sign_str def gen_matrix_sign(params,token): """""""""""""""""""""""""""""""""""""""""""""""" # 生成矩阵签名 # # @param dict/list params # @param str token # @return str # @todo """""""""""""""""""""""""""""""""""""""""""""""" return md5((md5(assemble(params)).upper()+token)).upper()