Android开发中的签名方式

在最近的开发过程中,用到了签名方式,简单说就是在请求网络数据的时候通过md5加密上传必选的参数以及最重要的时间戳和秘钥,否则会报签名失败。这里先简单说一下时间戳和秘钥。
时间戳(time):我的博客也有到过,可以参考一下 http://blog.csdn.net/lk764265808/article/details/70915907
秘钥(sign):是后台提供给你的,但这个秘钥并不是真正的秘钥,后边会详细解析这个秘钥。
在做签名的时候,首先要把你要传的参数进行md5加密。这里我把他封装了一下,如下:

package utils;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * Md5加密的工具类
 */
public class MD5Util {
    //Md5加密
    public static String md5(String input) throws NoSuchAlgorithmException {
        String result = input;
        if(input != null) {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(input.getBytes());
            BigInteger hash = new BigInteger(1, md.digest());
            result = hash.toString(16);
            while(result.length() < 32) {
                result = "0" + result;
            }
        }
        return result;
    }
}

通过调用MD5Util .md5(传入的是你需要上传的参数+时间戳+秘钥),返回的是一个32位小写的md5字符串。重点就是这个字符串才是真正的签名秘钥,后台提供给你的只是一串简单的秘钥字符串(也是很重要的)。
好了,md5(即真正的秘钥)得到了,开始请求网络数据。

OkHttpUtil.post(*上下文*, *url地址*, *map(存的是必选参数+time+sign)*);

关于秘钥着重提一下。首先上述提到的后台会给你提供一个秘钥,但并不是意味着直接通过md5加密把时间戳和秘钥一起上传请求数据就可以了,不是这样的(md5下面会提到)。简单来说通过md5加密之后返回的字符串才是真正的签名秘钥(sign通常是放到最后的),得到这个真正的签名秘钥才能和时间戳以及其他你需要的必选参数一起来请求数据,我个人用的是LinkedHashMap,把所有的参数放到map中去,去做网络请求。因为我个人这边需要对参数进行排序,故用了LinkedHashMap(Map是无序的,相信大家也都知道)。
按照这样的流程下来,就能请求正确的数据,如若报了签名失败,则证明你的参数有问题,反之成功了会返回相对应的数据。这里提供几个链接方便大家使用。
API测试工具:http://runapi.showdoc.cc/
Md5加密: http://tool.chinaz.com/tools/md5.aspx
时间戳:http://unixtime.51240.com/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宸汐Baby

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值