md5(string,raw);
参数
描述
string
必需。规定要计算的字符串。
raw
可选。规定十六进制或二进制输出格式:TRUE - 原始 16 字符二进制格式; FALSE - 默认。32 字符十六进制数;
接口的签名验证:
function verify_app_key(){
$request = $GLOBALS['context']->request;
$db = $GLOBALS['context']->db;
if(!isset($GLOBALS['context']->config['api_version'])){
$api_version = 1;
}else{
$api_version = $GLOBALS['context']->config['api_version'];
}
//判断是否传过来了sign参数
if(!isset($request['key']) || !isset($request['sign']))
return return_value(-1,"缺少sign参数");
//从数据库中取出key和secret
$sql = "select * from api_user where `key` = '".$request['key']."'";
$api_user = $db->get_row($sql);
if(!$api_user){
return return_value(-1,"账号不存在");
}
//验证签名时间
if(isset($api_version) && $api_version == 2){
if($request['timestamp']+300 < time()){
return return_value(-1,"时间错误");
}
}
//将请求过来的sign赋值给$post_sign保存
$post_sign = $request['sign'];
//根据签名规则生成签名
$sign = create_sign($api_user['key'],$api_user['password'],$request);
//比对签名是否相同
if($post_sign != $sign){
return return_value(-1,"sign错误");
}
return return_value(1,"");
}
//生成签名函数
function create_sign($app_key,$app_secret,$data){
if(!isset($GLOBALS['context']->config['api_version'])){
$api_version = 1;
}else{
$api_version = $GLOBALS['context']->config['api_version'];
}
if(isset($api_version) && $api_version == 2){
unset($data['sign']);//去除传过来的sign
ksort($data);//对数据按照首字母顺序进行排序
$sign = "";
//排序完成后按照key.value组成字符串
foreach ($data as $k=>$v){
$sign .= $k.$v;
}
$sign = md5_3($app_key . $sign . $app_secret);
}else{
$sign = md5($app_key.$app_secret.add_day_time());
}
return $sign;
}
//md5_3加密方式(两次MD516位加密,一次32位加密后全部转换为大写)
function md5_3($str) {
return strtoupper(md5(md5(md5($str, true), true)));
}