API签名算法
出自淘宝开放平台 - 开发文档
跳转到: 导航, 搜索
API2.0签名算法描述:
API调用,应用级参数sign生成规则:
1、参数变化
1、增加:sign_method,该字段属于可选类型。可选值(md5,hmac
2v参数赋值为:2.0
2、拼装
根据参数名称将你的所有请求参数按照字母先后顺序排序:key + value .... key + value
value对是除签名和图片外的所有请求参数按key做的升序排列, value无需编码。
例如将foo=1,bar=2,baz=3 排序为bar=2,baz=3,foo=1
参数名和参数值链接后,得到拼装字符串bar2baz3foo1
3、签名(utf-8编码)
1md5:secretcode同时拼接到参数字符串头、尾部进行md5加密,再转化成大写,格式是:uppercase(secret)。例如:uppercase(md5secretbar2baz3foo1secret))
2hmac:采用hmacmd5方式,secretcode只在头部的签名后,再转化成大写,格式是:uppercase(, secret))。例如:uppercase(hmac(bar2baz3foo1,secret))
4、示例:
1md5签名的例子:
gw.api.taobao/router/rest?app_key=12020133&fields=desc&format=xml&iid=638
46231213263ff29f3c20209038c67&method=&nick=hz0799&sign=3B719BDD9499E9B18107F68F5EFA5BBF&sign_method=md5×tamp=2010-01-06%2017:51:30&v=2.0
2hmac签名的例子:
gw.api.taobao/router/rest?app_key=12020133&fields=desc&format=xml&iid=63846231213263ff29f3c20209038c67&method=&nick=hz0799&sign=77DF3EC788D301A16D6EC16F79F767A9&sign_method=hmac×tamp=2010-01-07%2012:12:23&v=2.0
MD5算法代码片段:
/**
* 新的md5签名,首尾放secret
*
* @param params 传给服务器的参数
*
* @param secret 分配给您的APP_SECRET
*/
public static String md5Signature(TreeMap<String, String> params, String secret) {
String result = null;
StringBuffer orgin = getBeforeSign(params, new StringBuffer(secret));
if (orgin == null)
return result;
// secret last
orgin.append(secret);
签名字符串是什么
try {
MessageDigest md = Instance("MD5");
result = byte2hex(md.String().getBytes("utf-8")));
} catch (Exception e) {
throw new java.lang.RuntimeException("sign error !");
}
return result;
}
/**
* 二行制转字符串
*/
private static String byte2hex(byte[] b) {
StringBuffer hs = new StringBuffer();
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.HexString(b[n] & 0XFF));
if (stmp.length() == 1)
hs.append("0").append(stmp);
else
hs.append(stmp);
}
String().toUpperCase();
}
/**
* 添加参数的封装方法
* @param params
* @param orgin
* @return
*/
private static StringBuffer getBeforeSign(TreeMap<String, String> params, StringBuffer orgin) {
if (params == null)
return null;
Map<String, String> treeMap = new TreeMap<String, String>();
treeMap.putAll(params);
Iterator<String> iter = treeMap.keySet().iterator();
while (iter.hasNext()) {
String name = (String) ();
orgin.append(name).(name));
}
return orgin;
}
HMAC算法代码片段:
/**
* 新的md5签名,hmac加密
*
* @param params 传给服务器的参数
*
* @param secret 分配给您的APP_SECRET
*/
public static String hmacSignature(TreeMap<String, String> params, String secret) {
String result = null;
StringBuffer orgin = getBeforeSign(params, new StringBuffer());
if (orgin == null)
return result;
try {
result = byte2hex(String().getBytes("utf-8"), secret));
} catch (Exception e) {
throw new java.lang.RuntimeException("sign error !");
}
return result;
}
/**
* HMAC加密算法
*
* @param data
* @param key
* @return
* @throws Exception
*/
public static byte[] encryptHMAC(byte[] data, String key) throws Exception {
SecretKey secretKey = new Bytes("utf-8"), "HmacMD5");
Mac mac = Algorithm());
mac.init(secretKey);
return mac.doFinal(data);
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。