开放平台中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,并且针对...
  • u011448427
  • u011448427
  • 2016年03月26日 17:16
  • 3966

App开放接口api安全性—Token签名sign的设计与实现

前言        在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如...
  • fengshizty
  • fengshizty
  • 2015年09月27日 17:44
  • 41305

关于token、签名、加密的一点理解

在之前的工作中,总是接触到这些概念,之前都是零散的理解,在此总结下,以方便以后查阅 一、token  在网站、app与服务器交互的过程中,很多时候为了: 1、避免用户多次输入密码 2、实现自动...
  • maocai008
  • maocai008
  • 2018年01月15日 15:51
  • 88

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

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

spring web项目 数据库用户名密码加密解密

spring web项目 数据库用户名密码加密解密 在使用springMVC开发web项目中,数据库的用户名,密码一般都是配置在.properties文件中 然后在通过.xml配置文件引入...
  • yucaifu1989
  • yucaifu1989
  • 2016年03月17日 14:16
  • 2266

加密和解密,(数字)签名和验证,公钥私钥

网络安全中最知名的人物大概就是Bob和Alice了,因为很多安全原理阐述中都用这两个虚拟人物来进行实例说明。 我们来看看Bob是怎么从CA中心获得一个数字证书的: 1、Bob首先创建他自己的密钥对(k...
  • zh521zh
  • zh521zh
  • 2016年07月04日 11:45
  • 1896

http接口开发请求参数签名实用工具类

作用: http接口开发请求参数签名实用工具类, 在http接口对参数做签名,防止接口被非法调用...
  • 5iasp
  • 5iasp
  • 2015年06月07日 02:06
  • 6464

如何写出安全的API接口?接口参数加密签名设计思路

开发中经常用到接口,尤其是在面向服务的soa架构中,数据交互全是用的接口。                几年以前我认为,我写个接口,不向任何人告知我的接口地址,我的接口就是安全的,现在回想真是...
  • dz45693
  • dz45693
  • 2016年12月14日 11:55
  • 7715

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

开放平台中oauth认证中请求参数签名的算法
  • yaerfeng
  • yaerfeng
  • 2014年01月19日 10:35
  • 5638

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

公司里最近在做APP开发,使用ssm作为后台框架。采用Token机制判断用户是否已登录,Springmvc本身带有拦截器,可以使用拦截器拦截token判断token是否还在有效期内。 import ...
  • zzf_start
  • zzf_start
  • 2017年10月27日 09:58
  • 582
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:开放平台中oauth认证中请求参数签名的算法
举报原因:
原因补充:

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