开放平台中oauth认证中请求参数签名的算法

原创 2015年07月10日 09:26:00

原文:开放平台中oauth认证中请求参数签名的算法

源代码下载地址:http://www.zuidaima.com/share/1572934678825984.htm

Java生成签名示例

				     // 定义申请获得的appKey和appSecret
				     String appkey = "XXXXXXXX";
				     String secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
				     String apiUrl = "http://api.dianping.com/v1/business/find_businesses";
				     
				     // 创建参数表
				     Map<String, String> paramMap = new HashMap<String, String>();
				     paramMap.put("format", "json");
				     paramMap.put("最代码网址", "www.zuidaima.com");
				     paramMap.put("latitude", "31.21524");
				     paramMap.put("longitude", "121.420033");
				     paramMap.put("category", "美食");
				     paramMap.put("region", "长宁区");
				     paramMap.put("limit", "20");
				     paramMap.put("radius", "2000");
				     paramMap.put("offset_type", "0");
				     paramMap.put("has_coupon", "1");
				     paramMap.put("has_deal", "1");
				     paramMap.put("keyword", "泰国菜");
				     paramMap.put("sort", "7");
				 
				     // 对参数名进行字典排序
				     String[] keyArray = paramMap.keySet().toArray(new String[0]);
				     Arrays.sort(keyArray);
				 
				     // 拼接有序的参数名-值串
				     StringBuilder stringBuilder = new StringBuilder();
				     stringBuilder.append(appkey);
				     for (String key : keyArray)
				     {
				         stringBuilder.append(key).append(paramMap.get(key));
				     }
				     
				     stringBuilder.append(secret);
				     String codes = stringBuilder.toString();
				     
				     // 字符串连接示例
				     // XXXXXXXXcategory美食city上海formatjsonhas_coupon1has_deal1keyword泰国菜latitude31.21524limit20longitude121.420033offset_type0radius2000region长宁区sort7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
				     
				     // SHA-1编码, 这里使用的是Apache codec,即可获得签名(shaHex()会首先将中文转换为UTF8编码然后进行sha1计算,使用其他的工具包请注意UTF8编码转换)
				     /*
				      * 以下sha1签名代码效果等同
				      * byte[] sha = org.apache.commons.codec.digest.DigestUtils.sha(org.apache.commons.codec.binary.StringUtils.getBytesUtf8(codes));
				      *  String sign = org.apache.commons.codec.binary.Hex.encodeHexString(sha).toUpperCase(); 
				      */
				     String sign = org.apache.commons.codec.digest.DigestUtils.shaHex(codes).toUpperCase();
				     
				     //签名示例 
				     //7D78381BC58E1DB1DBA4BD965916FE6B4D5DC892
					

JavaScript生成签名示例

// 定义申请获得的appKey和appSecret  
 var appkey = "XXXXXXXX";  
 var secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";  
  
 // 创建参数表  
 var param = {};  
 param["最代码网址"]="www.zuidaima.com";  
 param["latitude"]="31.21524";  
 param["longitude"]="121.420033";  
 param["category"]="美食";  
 param["region"]="长宁区";  
 param["limit"]="20";  
 param["radius"]="2000";  
 param["offset_type"]="2";  
 param["has_coupon"]="1";  
 param["has_deal"]="1";  
 param["keyword"]="泰国菜";  
 param["sort"]="7";  
  
 // 对参数名进行字典排序  
 var array = new Array();  
 for(var key in param)  
 {  
     array.push(key);  
 }  
 array.sort();  
   
 // 拼接有序的参数名-值串  
 var paramArray = new Array();  
 paramArray.push(appkey);  
 for(var index in array)  
 {  
 var key = array[index];  
 paramArray.push(key + param[key]);  
 }  
 paramArray.push(secret);  
   
 // 字符串连接示例  
// XXXXXXXXcategory美食city上海formatjsonhas_coupon1has_deal1keyword泰国菜latitude31.21524limit20longitude121.420033offset_type0radius2000region长宁区sort7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  
   
   
 // SHA-1编码,并转换成大写,即可获得签名  
 var shaSource = paramArray.join("");  
 var sign = new String(toSHA1(shaSource)).toUpperCase();  
   
 //签名示例   
//7D78381BC58E1DB1DBA4BD965916FE6B4D5DC892  

转载:http://developer.dianping.com/app/documentation/signature

另外附上纯java实现的SHA1算法。


基于SpringMVC+hibernate-validator实现实现动态签名验证

首先我这个标题的意思先大家说说,我想要做的事情。 例如:我现在提供一个api给别人使用,然后api可能存在加签、解签、验签等过程,而且假设我不同的接入者使用了不同的签名规则MD5或者RAS,并且针对...

SpringMVC使用filter过滤器对数据解密并验证数据签名

公司里最近在做APP开发,使用ssm作为后台框架。采用Token机制判断用户是否已登录,Springmvc本身带有拦截器,可以使用拦截器拦截token判断token是否还在有效期内。 import ...

Spring MVC的使用技巧(APP验证 加密/解密Json 敏感词过滤)

APP服务端的Token验证 通过拦截器对使用了 @Authorization 注解的方法进行请求拦截,从http header中取出token信息,验证其是否合法。非法直接返回401错误,合法...
  • hj7jay
  • hj7jay
  • 2016年07月14日 11:14
  • 8558

springMVC生成图片验证码

以下是springMVC生成图片验证码相关代码,请参考: controller层如下: /**      * 生成验证码      * @param request      *...

利用Spring AOP自定义注解解决日志和签名校验

一、需解决的问题 部分API有签名参数(signature),Passport首先对签名进行校验,校验通过才会执行实现方法。     第一种实现方式(Origin):在需要签名校验...

appkey 和 secret key & token

appkey 和 secret key相当于当前账户的另外一套账号和密码机制. 当然, 仅仅是在API调用的范围内适用. 1.生成方式可以自己定义, appkey保证不重复就行. secret key...

淘宝开放平台签名验证失败

错误提示: [sdk.comm.err] [156] ERROR [2015-07-20 17:16:32^_^null^_^null^_^192.168.2.32^_^Windows Vista^...

请教淘宝API sign签名问题,望高人指点!谢谢!

请教淘宝API sign签名问题
  • qwestw
  • qwestw
  • 2014年05月29日 19:40
  • 5002
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:开放平台中oauth认证中请求参数签名的算法
举报原因:
原因补充:

(最多只允许输入30个字)