`

【转】baidu map sn 生成算法详解

阅读更多

参考地址:http://developer.baidu.com/map/index.php?title=lbscloud/api/appendix

假设ak=yourak(yourak为一个字符串),在http://lbsyun.baidu.com/apiconsole/key 中配置了该ak的验证方式是sn签名的验证方式,点击下面那排星号,显示Security Key,可以看到此ak对应的sk私钥,假设sk=yoursk。

请求的url是:http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak&sn=7de5a22212ffaa9e326444c75a58f9a0

后面的sn就是要计算的,sk不需要在url里出现,但是在计算sn的时候需要sk(假设sk=yoursk)。

下面附上Java版代码:

 

  1. package com.boonya.baidu;  
  2.   
  3. import java.io.UnsupportedEncodingException;  
  4. import java.net.URLEncoder;  
  5. import java.security.NoSuchAlgorithmException;  
  6. import java.util.LinkedHashMap;  
  7. import java.util.Map;  
  8. import java.util.Map.Entry;  
  9. //java版计算signature签名  
  10. public class SnCal  
  11. {  
  12.   
  13.     public static void main(String[] args) throws UnsupportedEncodingException, NoSuchAlgorithmException  
  14.     {  
  15.         SnCal snCal = new SnCal();  
  16.   
  17.         // 计算sn跟参数对出现顺序有关,所以用LinkedHashMap保存<key,value>,此方法适用于get请求,如果是为发送post请求的url生成签名,请保证参数对按照key的字母顺序依次放入Map。以get请求为例:http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak,paramsMap中先放入address,再放output,然后放ak,放入顺序必须跟get请求中对应参数的出现顺序保持一致。  
  18.         Map paramsMap = new LinkedHashMap<String, String>();  
  19.         paramsMap.put("address""百度大厦");  
  20.         paramsMap.put("output""json");  
  21.         paramsMap.put("ak""yourak");  
  22.   
  23.         // 调用下面的toQueryString方法,对LinkedHashMap内所有value作utf8编码,拼接返回结果address=%E7%99%BE%E5%BA%A6%E5%A4%A7%E5%8E%A6&output=json&ak=yourak  
  24.         String paramsStr = snCal.toQueryString(paramsMap);  
  25.   
  26.         // 对paramsStr前面拼接上/geocoder/v2/?,后面直接拼接yoursk得到/geocoder/v2/?address=%E7%99%BE%E5%BA%A6%E5%A4%A7%E5%8E%A6&output=json&ak=yourakyoursk  
  27.         String wholeStr = new String("/geocoder/v2/?" + paramsStr + "yoursk");  
  28.   
  29.         // 对上面wholeStr再作utf8编码  
  30.         String tempStr = URLEncoder.encode(wholeStr, "UTF-8");  
  31.   
  32.         // 调用下面的MD5方法得到最后的sn签名7de5a22212ffaa9e326444c75a58f9a0  
  33.         System.out.println(snCal.MD5(tempStr));  
  34.     }  
  35.   
  36.     // 对Map内所有value作utf8编码,拼接返回结果  
  37.     public String toQueryString(Map<?, ?> data) throws UnsupportedEncodingException  
  38.     {  
  39.         StringBuffer queryString = new StringBuffer();  
  40.         for (Entry<?, ?> pair : data.entrySet())  
  41.         {  
  42.             queryString.append(pair.getKey() + "=");  
  43.             queryString.append(URLEncoder.encode((String) pair.getValue(), "UTF-8") + "&");  
  44.         }  
  45.         if (queryString.length() > 0)  
  46.         {  
  47.             queryString.deleteCharAt(queryString.length() - 1);  
  48.         }  
  49.         return queryString.toString();  
  50.     }  
  51.   
  52.     // 来自stackoverflow的MD5计算方法,调用了MessageDigest库函数,并把byte数组结果转换成16进制  
  53.     public String MD5(String md5)  
  54.     {  
  55.         try  
  56.         {  
  57.             java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");  
  58.             byte[] array = md.digest(md5.getBytes());  
  59.             StringBuffer sb = new StringBuffer();  
  60.             for (int i = 0; i < array.length; ++i)  
  61.             {  
  62.                 sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(13));  
  63.             }  
  64.             return sb.toString();  
  65.         } catch (java.security.NoSuchAlgorithmException e)  
  66.         {  
  67.         }  
  68.         return null;  
  69.     }  
  70.   
  71. }
分享到:
评论

相关推荐

    vue-baidu-map离线百度地图,并附带jar包免费下载百度瓦片数据

    1.vue-baidu-map在线地图代码不用改动,只用按照文档添加baidu-api.js和baidu-init.js,并在vue依赖包 node_modules文件找到,修改vue-baidu-map的 index.js文件 就能完成离线配置 2.jar包可以免费下载百度地图瓦片...

    计算机图形学几何工具算法详解

    ### 计算机图形学几何工具算法详解 #### 第1章 绪论 在这一章节中,作者首先介绍了计算机图形学的基本概念和发展历程,并提出了如何有效地利用本书进行学习的方法。随后,作者着重讨论了数值计算中的几个关键问题...

    SVPWM的原理及法则推导和控制算法详解[定义].pdf

    SVPWM技术原理及法则推导和控制算法详解 SVPWM(Space Vector Pulse Width Modulation)是一种近年发展的控制方法,通过对三相功率逆变器的六个功率开关元件组成的特定开关模式产生的脉宽调制波,能够使输出电流...

    基于Python+gurobi的列生成算法(column generation algorithm)求解航班人员调度分配问题

    该代码文件是一个完整... 包含了问题说明、数据、详细的gurobi列生成算法求解代码,是一份完整的航班人员调度分配、列生成算法、gurobi求解器的绝佳学习资料。所有代码均有详细注释,已经经过反复调试,可以直接运行。

    vuebaidumap基于Vue2的百度地图组件库

    VueBaiduMap是一款专为Vue2框架设计的百度地图组件库,它允许开发者在Vue应用中无缝集成百度地图的功能,提供了丰富的地图操作和自定义功能。这个组件库旨在简化与百度地图API的交互,使开发者能够更加高效地构建...

    数据挖掘十大算法详解.epub

    数据挖掘十大算法 数据挖掘领域的十大经典算法:C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART.

    百度分词算法详解

    在分词算法的选择上,尽管百度没有公开其内部使用的具体算法,但业界普遍推测百度采用了正向最大匹配算法,并可能结合了双向最大匹配算法。这种结合方式能够根据词语的搜索频率和权重差异来确定最佳匹配顺序,尤其是...

    [原创][网页游戏]数独生成算法及实例

    移动端以及PC浏览器皆可使用 ...百度google了下生成算法,没有发现有效的生成算法,很多是随机回滚类型[还有错误的算法。。。] 在纸上随意写写,排排,发现还有个简单的生成数独的方法,但没有论证是否可以生成所有数独

    vue-baidu-map百度地图组件指南

    vue-baidu-map 百度地图组件指南 vue-baidu-map 是一个基于 Vue.js 的 百度地图组件库,提供了便捷的方式来在 Vue 项目中集成百度地图。下面是该组件库的使用指南。 安装 使用 npm 安装 vue-baidu-map 组件库: ...

    vue-baidu-map 本地工具资源和配制好的API资源

    使用时参考我的博文https://blog.csdn.net/weixin_44000275/article/details/110482508, 修改Map.vue中的方法和myMap.js中的瓦片路径

    百度天气api-IP定位服务SN码计算.py

    使用百度天气的api获取IP定位服务,使用SN码检验方式进行请求获取数据,此程序是计算SN码,python3.8环境 注:SN码方式校验暂时不适用于获取国内天气信息此服务,获取国内天气只能使用ip白名单或者不设置校验

    vue-baidu-map,百度地图切图工具,瓦片图制作利器

    百度地图切图工具,瓦片图制作利器,结合vue-baidu-map制作瓦片图,可直接生成瓦片图内容,生成对应的瓦片图内容的HTML

    Photoshop滤镜里转Normal Map插件

    Photoshop滤镜里自动转Normal Map的插件,效果自然比不上做高模后烘出的Normal,对于简单的小物件还是很好用的,方便快捷~~~

    GPS坐标转百度坐标后台代码算法

    百度地图API前台js脚本实现的GPS转百度坐标只适用于转换,转换后因为是移步调用转换,所以无法实时获取进行画线等操作,只能从后台入手进行转换,再前台直接调用,因为暂时没有找到GPS直接转百度坐标的算法,只能先...

    baidu_map_demo

    标题"baidu_map_demo"所涉及的知识点主要是如何处理百度地图的坐标偏移问题。在描述中提到,解决方法通常包括使用特定的转换算法,将原始经纬度(如通过Google Earth或GPS设备获取)转换为百度地图能够正确显示的...

    leetCode一线大厂算法详解+代码

    《leetCode一线大厂算法详解+代码》是一个针对程序员面试准备的重要资源,它涵盖了大量算法题目及对应的解题代码,旨在帮助求职者提升算法能力,顺利通过一线大厂的面试。这里的“一线大厂”通常指的是如阿里巴巴、...

    数学建模十大算法程序详解_打包了_matlab

    资源名:数学建模十大算法程序详解_打包了_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:新手及有...

    googlemap 不能用 用baidu map

    在这个背景下,百度地图(Baidu Map)成为了国内开发者首选的地图API。 标题“googlemap 不能用 用baidu map”指出了一个普遍的问题,即Google Maps在国内的不可用性,以及开发者转向使用百度地图作为解决方案。这...

    baidu_map.zip_Api. Map. Baidu_java baidu map_百度 map_百度地图定位

    本文将详细介绍使用百度地图API实现基本功能,特别是定位功能,以及如何在Java环境中集成和操作。 首先,百度地图API是百度提供的一系列接口,允许开发者在其平台上集成地图功能,包括但不限于定位、路线规划、地图...

Global site tag (gtag.js) - Google Analytics