Java 服务器端手机验证码sdk

感谢巨人们,站在巨人的肩膀上.

参考: http://blog.sina.com.cn/s/blog_80a6423d0102wm74.html#commonComment

1 点击生成验证码,发送到应用服务器,服务器随机生成6位验证码

private int puductCode(){
  return
  (int)((Math.random()*9+1)*100000);
}

2 根据 time, SECRET,code, phoneNum, 计算出一个token

   public static String generateToken(String secret, String param)throws Exception{
        param = encodeUrl(param);
        Mac mac = Mac.getInstance("HmacSHA1");
        SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(CONTENT_CHARSET), mac.getAlgorithm());
        mac.init(secretKey);
        byte[] hash = mac.doFinal(param.getBytes(CONTENT_CHARSET));
        String  sig = new String(Base64Coder.encode(hash));
        return sig;
    }

3 将 token , 和 time返回给客户端

4 用户收到验证码, 填写验证码, 客户端讲验证码,token, time同时传回给服务器, 服务器用同样的方法进行验证, 并且判定时间是否过期.

服务器需要定期换SECRET. 

这样做是为了服务器不存储code, 突然明白了SDK中为什么有那么多token

原文地址:https://www.cnblogs.com/xiaozhuan/p/6278424.html