SmartWeatherAPI 接口加密算法java实现

android天气预报应用(二)

  • 一、官方文档使用说明

    以下是文档中的原话,copy过来。

    1、产品概述
    SmartWeatherAPI 接口(简称”SWA”接口)是中国气象局面向网络媒体、手机厂商、第三方气象服务机构等用户,通过 web 方式提供数据气象服务的官方载体。
    2、使用说明

    该数据主要包括实况、指数、常规预报等数据内容。
    3、调用规范
    规范用于指导开放平台用户合理调用实况、指数、常规预报等服务数据。
    请求方式:http get
    接口组成:由固定 URL 加 5 个不同的参数组成,完整 URL 需客户端经过固定方式加密后使用。
    数据返回:json
    完整 URL:http://webapi.weather.com.cn/data/?areaid=""&type=""&date=""&appid=""&key=".urlencode($key);

    注意:这里的appid只取字符串的前六位。
    固定 URL:http://webapi.weather.com.cn/data/


    这里边的难点就在于请求URL的最后一个参数key=".urlencode($key),它是一个通过php的函数算出来的。具体如下:

    加密方式:
    private_key 仅负责与 public_key 共同合成 key 传参,私钥不可见,客户端与服务端各存储一份;

    public_key 为不包含 key 在内的完整 URL 其它部分(此处appid 为完整 appid)
    示例:
    http://webapi.weather.com.cn/data/?areaid=101010100&type=forecast&date=201211281030&appid= cf2d61521456sads
    key 的算法
    key=base64_encode(hash_hmac('sha1',$public_key,$private_key,TRUE));
    key 加密后通过 urlencode 对其编码后传参
    注:每一个产品使用用户分配一个唯一标识 appid,用于统计用户访问情况、区分用户提供差异服务,终端用户按照终端型号分配,一个型号对应一个标识。

    由于key的算法在web端开发是十分顺手的,只需要将上面那串代码写到php中就OK了,然而将上述算法迁徙到java中还是费了笔者不少的功夫,这里笔者将无私的分享给大家。具体代码如下:

     

    view sourceprint?

    01./**

    02.* 计算签名

    03.* @param baseString 明文

    04.* @param keyString 私钥

    05.* @return 秘钥

    06.* @throws GeneralSecurityException

    07.* @throws UnsupportedEncodingException

    08.*/

    09.public static String computeSignature(String baseString, String keyString)

    10.throws GeneralSecurityException, UnsupportedEncodingException {

    11. 

    12.SecretKey secretKey = null;

    13. 

    14.byte[] keyBytes = keyString.getBytes();

    15.secretKey = new SecretKeySpec(keyBytes, "HmacSHA1");

    16. 

    17.Mac mac = Mac.getInstance("HmacSHA1");

    18. 

    19.mac.init(secretKey);

    20. 

    21.byte[] text = baseString.getBytes();

    22. 

    23.return new String(Base64.encodeBase64(mac.doFinal(text))).trim();

    24.}

    参考地址:http://www.it165.net/pro/html/201403/10491.html

Java对PHP服务器hmac_sha1签名认证方法的匹配实现

参考地址:http://4789781.blog.51cto.com/4779781/1436699


你可能感兴趣的:(java,PHP,加密,android,hmac_sha1)