Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 563|回复: 0

开发交流:人人网应用程序的开发第三篇:人人网签名算法

[复制链接]

该用户从未签到

发表于 2011-10-24 09:29:58 | 显示全部楼层 |阅读模式
基于Android平台的人人网应用程序的开发
第三篇: 人人网签名算法

   官方文档:http://dev.xiaonei.com/wiki/Calculate_signature

     我们以这个接口为例:friends.getFriends

      


     先完成签名,required的参数是必选的,除了sig以外,因为签名值还没算,alternative的参数,要么选access_token,要么选api_key和session_key。Optional的参数是可选的,一般我们都要选上format这个参数,使返回的数据格式为JSON,这样解析的时候会方便很多,其它参数都是可选的,大家根据自己的实际情况选择。

根据上面的这些原则,我们用如下这些参数:

直接使用access_token请求的参数:
String method = "friends.getFriends";
String v = "1.0";
String access_token = Util.access_token;
String format = "JSON";

使用api_key和session_key请求的参数:
String method = "friends.getFriends";
String v = "1.0";
String api_key = apiKey;
String session_key = sessionkey;
String format = "JSON";

       //使用access_token请求的示例代码,另一个就把参数都加上就行了。
    //将请求参数格式化为“key=value”格式
    //获取签名的java代码
    public String getParams(){   
                                List params = new ArrayList();
                String method = "friends.getFriends";
                String v = "1.0";
                String access_token = Util.access_token;
                String format = "JSON";
                 
                params.add("method="+method);
                params.add("v="+v);
                params.add("access_token="+access_token);
                params.add("format="+format);
               
                // 拼装参数完毕后,params的值为:
                // [method=friends.getFriends, v=1.0, access_token=147396|6.cd69dd5a0549c925631969b8d2af1b3f.2592000.1315641600-244248724, format=JSON]
               
                return getSignature(params, Util.RENREN_SECRET);
           }

     / **
     * 将上诉格式化好的参数键值对,以字典序升序排列后,拼接在一起,即“k1=v1k2=v2k3=v3”;
   * 在上拼接好的字符串末尾追加上应用的Secret Key;
   * 上述字符串的MD5值即为签名的值
   * 获取签名值
   * @param paramList
     * @param secret
     * @return
     */
    public String getSignature(List<String> paramList,String secret){
                    Collections.sort(paramList);
                    StringBuffer buffer = new StringBuffer();
                    for (String param : paramList) {
                        buffer.append(param);  //将参数键值对,以字典序升序排列后,拼接在一起
                    }
                    buffer.append(secret);  //符串末尾追加上应用的Secret Key
                    try {            //下面是将拼好的字符串转成MD5值,然后返回
                       java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
                       StringBuffer result = new StringBuffer();
                       try {
                           for (byte b : md.digest(buffer.toString().getBytes("UTF-8"))) {
                               result.append(Integer.toHexString((b & 0xf0) >>> 4));
                               result.append(Integer.toHexString(b & 0x0f));
                           }
                       } catch (UnsupportedEncodingException e) {
                           for (byte b : md.digest(buffer.toString().getBytes())) {
                               result.append(Integer.toHexString((b & 0xf0) >>> 4));
                               result.append(Integer.toHexString(b & 0x0f));
                           }
                       }
                       
                       return result.toString();
                   } catch (java.security.NoSuchAlgorithmException ex) {
                     
                   }
                  
                return null;
           }


     这样就计算出了sig的值,签名值已经计算出来了。下面就该用这个接口的参数去请求人人网服务器,获取数据了。

   
回复

使用道具 举报

该用户从未签到

发表于 2011-10-24 09:30:00 | 显示全部楼层

Re:开发交

过来围观支持……~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-10 18:56 , Processed in 0.421075 second(s), 45 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表