签名规则说明
1. 将参数先按键值排序(只做一级排序),进行key和value的拼接
2. 拼接完后,在最后面再拼接上分配的 appSecret 然后用sha1对拼接串加密
签名示例
假如传入参数:
$param = array(
'access_token' => '',
'app_key' => '152968d9af768bf084dad750f78d6866',
'once' => '911091697599',
'version' => '1.0',
'sdk_from' => 'java',
'phone' => '13800138000',
'type' => 0,
'client' => '{"channel":"mcontact_md_ahlrj_api_android","imei":"1","version":"v3.9.8"}',
);
1.将参数先按键值排序(只做一级排序),即变成
$param = array(
'access_token' => '',
'app_key' => '152968d9af768bf084dad750f78d6866',
'client' => '{"channel":"mcontact_md_ahlrj_api_android","imei":"1","version":"v3.9.8"}',
'once' => '911091697599',
'phone' => '13800138000',
'sdk_from' => 'java',
'type' => 0,
'version' => '1.0',
);
2.然后拼接起来:
access_token=app_key=152968d9af768bf084dad750f78d6866client={"channel":"mcontact_md_ahlrj_api_android","imei":"1","version":"v3.9.8"}once=911091697599……
3. 拼接完后,在最后面再拼接上分配的 appSecret 然后用sha1对拼接串加密
//////////////////////////////////////////////////////////////
示例代码,仅供参考:
签名生成方式
将需要提交的参数(signature除外),按key做字典排序。 然后 key=value 形式拼接, 然后在后面 拼上 appscret。 再sha1加密
//具体php实现
function generateSignature($params_array, $appsecret) {
if(!$appsecret){
return '';
}
$str = '';
ksort($params_array, SORT_STRING);
foreach ($params_array as $k=>$v) {
$str .= $k."=".$v;
}
$str .= $appsecret;
return sha1($str);
} $signature = generateSignature($params_array, '分配的appscret'); //$params_array 就是需要提交的参数 //具体java实现
public String getNornmalSignature(HashMap<String, String> params, String appscret) {
String signature = null;
Map<String, String> sortedParams = new TreeMap<String, String>(params);
Set<Entry<String, String>> entrys = sortedParams.entrySet();
StringBuilder basestring = new StringBuilder();
for (Entry<String, String> param : entrys) {
basestring.append(param.getKey())
.append("=")
.append(param.getValue() == null ? "" : param.getValue());
}
basestring.append(appscret);
try {
signature = DigestUtils.shaHex(basestring.toString());
} catch (Exception e) {
e.printStackTrace();
}
return signature;
}
//java调用例子
String once1 = new SimpleDateFormat("ssSSSS").format(new Date()) + String.valueOf(Math.random()).substring(2, 8);
HashMap<String, String> hm1 = new HashMap<String, String>(); hm1.put("app_key", app_key);
hm1.put("once", once1);
hm1.put("version", version);
hm1.put("sdk_from", sdk_from);
hm1.put("channel", channel);
hm1.put("mobile", mobile);
……
String signature1 = getNornmalSignature(hm1,appscret);

生成signature的更多相关文章

  1. Token以及签名signature的设计与实现

    LZ第一次给app写开放接口,把自己处理Token的实现记录下来,目的是如果以后遇到好的实现,能在此基础上改进.这一版写法非常粗糙,写出来就是让大家批评的,多多指教,感谢大家. 当初设计这块想达到的效 ...

  2. python接口自动化22-签名(signature)鉴权(authentication)之加密(HEX、MD5、HMAC-SHA256)

    前言 开放的接口为了避免被别人乱调用,浪费服务器资源,这就涉及到签名(Signature)加密了 API 使用签名方法(Signature)对接口进行鉴权(Authentication).每一次请求都 ...

  3. 什么是token及怎样生成token

    什么是token Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即 ...

  4. jwt的应用生成token,redis做储存

    解释一下JWT JWT就是一个字符串,经过加密处理与校验处理的字符串,由三个部分组成.基于token的身份验证可以替代传统的cookie+session身份验证方法.三个部分分别如下: header. ...

  5. signature验证/salt验证/token验证的作用

    1.salt验证: salt是随机生成的一串字符,salt验证的作用是将生成的salt与加密的密码密文拼接后再次加密存储  这样可以是存储在数据库中的密码更加安全 2.signature验证: I.将 ...

  6. 头条小视频和西瓜视频signature签名算法

    点击上方↑↑↑蓝字[协议分析与还原]关注我们 "分析今日头条内小视频和西瓜视频分享后浏览器打开所用的signature签名算法." 上月写的一篇关于使用微信的wxid加好友的文章, ...

  7. token是个什么东西?怎样生成并携带token

    什么是token及怎样生成token  转载自:https://www.cnblogs.com/lufeiludaima/p/pz20190203.html 什么是token Token是服务端生成的 ...

  8. 使用JWT登录生成token

    package com.example.demo.util; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import co ...

  9. WebApi基于Token和签名的验证

    最近一段时间在学习WebApi,涉及到验证部分的一些知识觉得自己并不是太懂,所以来博客园看了几篇博文,发现一篇讲的特别好的,读了几遍茅塞顿开(都闪开,我要装逼了),刚开始读有些地方不理解,所以想了很久 ...

随机推荐

  1. swagger 文件上传

    单个文件上传的写法: @RequestParam MultipartFile pictures 多个文件上传的写法: @RequestParam String token,@RequestPart(& ...

  2. YUI笔记 1 模块加载

    我们通常开发js程序就是使用<script>标签把脚本引入到页面中进行开发,如果是简单的逻辑还好,但是如果是比较庞大的大规模js开发,可能会出现下面的问题: 1.  <script& ...

  3. html的meta总结,html标签中meta属性使用介绍(转)

    html的meta总结,html标签中meta属性使用介绍 2014年11月5日 5928次浏览 引子 之前的我的博客中对于meta有个介绍,例如:http://www.haorooms.com/po ...

  4. 嵌入式中 ARM的几种工作模式 以及异常模式的优先级

    一.Arm工作模式: Arm微处理器支持7种工作模式,分别为: 1. 用户模式(Usr)            用于正常执行程序 2. 快速中断模式(FIQ)    用于高速数据传输 3. 外部中断模 ...

  5. Markdown速成班

    更多内容请参考: http://ibruce.info/2013/11/26/markdown/

  6. (十七)js bom/dom

    window 是所有BOM中所有对象的核心. window 的属性 window.self代表自己本身,相当于window. eg: console.log(window.self === windo ...

  7. MFC多语言程序版本,在不同的windows系统上的使用 FP_SetThreadUILanguage

    from: http://www.cnblogs.com/qijicxl/p/3840157.html 如何使MFC程序界面支持多国语言?这次使用后给自己做一个总结. 我们使用vc6.0的版本来试验 ...

  8. CVS winCVS配置讲解及用户管理

    首先 用到工具包包括 CVSNT ,WinCvs及相关python 2.2.3和TCL832 可点此链接下载 http://files.cnblogs.com/lppblogs/%E6%96%87%E ...

  9. vue前端开发那些事——vue开发遇到的问题

    vue web开发并不是孤立的.它需要众多插件的配合以及其它js框架的支持.本篇想把vue web开发的一些问题,拿出来讨论下.  1.web界面采用哪个UI框架?项目中引用了layui框架.引入框架 ...

  10. win7安装和配置IIS7

    Internet Information Services(IIS,互联网信息服务),是由微软公司提供的基于运行Microsoft Windows的互联网基本服务.IIS意味着你能发布网页, 要在wi ...