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()