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