Android移动端与服务器api接口加密示例(AES,MD5,Token)
来源:互联网 发布:淘宝v3会员是几钻 编辑:程序博客网 时间:2024/06/05 08:15
移动端接口安全流程:
获取token步骤:
* 1.拿到从后台返回的AES加密后的token
* 2.根据约定秘钥进行解密,并把token保存下来
AES秘钥由移动端和后台商议决定
后台验证步骤:
* 1.取出timestamp 验证是否是过期请求,过期则不处理
* 2.通过userId和token关系表查到token 用token替换sign
* 3.对新生成的token进行MD5,和客户端传入的sign进行比较,一致则处理
Android代码示例:
Mainactivity
public class MainActivity extends AppCompatActivity { private TextView tvTokenKey; private TextView tvTokenAfter; private TextView tvUrlAfter; String token_test="Im token"; String serect="Im Key";//此秘钥必须和解密的时候秘钥相同 private String mTokenFromServer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvTokenKey = (TextView) findViewById(R.id.tv_token_key); tvTokenAfter = (TextView) findViewById(R.id.tv_token_after); tvUrlAfter = (TextView) findViewById(R.id.tv_url_after); } //加密 public void encrypt(View view) { //模拟服务端返回的token (加密之后的) mTokenFromServer = EncryptUtils.encrypt(token_test, serect); tvTokenKey.setText("密文:"+mTokenFromServer); } //解密 public void decrypt(View view) { if (mTokenFromServer==null){ Toast.makeText(this, "请先获取密文", Toast.LENGTH_SHORT).show(); }else{ String token = ApiSecret.getToken(this,serect, mTokenFromServer);//真实token tvTokenAfter.setText("token:"+token);} } //获取url public void getUrl(View view) { HashMap<String, String> map = new HashMap<>(); map.put("userId","3"); map.put("userName","2"); String signUrl = ApiSecret.getSignUrl(this, "www.baidu.com", map); //模拟post上传的数据 tvUrlAfter.setText("url:"+signUrl); }}
ApiSecret
package com.yorick.gyh.apisecret;import android.content.Context;import android.text.TextUtils;import java.util.Map;import java.util.Set;/************************************************************************************************* * 作 者: 高永好 * 完成日期:2017-07-03 15:17 * 说明:对api进行加密处理 ************************************************************************************************/public class ApiSecret { /** * 获取token步骤: * 1.拿到从后台返回的AES加密后的token * 2.根据约定秘钥进行解密,并把token保存下来 * 此方法用于:1,登录获取token 2,token过期更新token * @param context * @param tokenFromServer AES加密后的 */ public static String getToken(Context context,String secret, String tokenFromServer){ String token = EncryptUtils.decrypt(tokenFromServer, secret); //将token保存下来,以便下次使用 ACache.get(context).put("token",token); return token; } /** * 后台验证步骤: * 1.取出timestamp 验证是否是过期请求,过期则不处理 * 2.通过userId和token关系表查到token 用token替换sign * 3.对新生成的token进行MD5,和客户端传入的sign进行比较,一致则处理 * @param url 请求的url * @param params 传入的参数,需要包含userId,不包含token * @return */ public static String getSignUrl(Context context,String url, Map<String,String> params){ String token=ACache.get(context).getAsString("token"); if (TextUtils.isEmpty(token)){ try { throw new Exception("请先初始化token"); } catch (Exception e) { e.printStackTrace(); } return ""; } long time = System.currentTimeMillis() /1000; String signUrl=url+"?"; Set<String> keys = params.keySet(); //构造正确的url for (String key:keys){ signUrl+=key+"="+params.get(key)+"&"; } //后台对time进行判断,比如两个小时之后认为这是非法请求 signUrl+=("timestamp="+time); //对www.baidu.com?userId=3×tamp=1231413&token=123456进行MD5编码获取到Sign String sign = EncryptUtils.encryptMD5ToString(signUrl+"&token="+token).toLowerCase(); return signUrl+"&sign="+sign; }}
EncryptUtils和Acache见demo Demo :点此下载ApiSecret
阅读全文
0 0
- Android移动端与服务器api接口加密示例(AES,MD5,Token)
- Android DES AES MD5加密
- Android加密之Md5,AES 加密
- Android加密和解密(DES,AES,MD5)
- android 与java服务器进行RSA+AES加密通信
- iOS 加密(MD5 ,AES,BASE64)
- C#加密方法(AES、MD5)
- unity MD5/AES加密
- 加密法(AES,MD5)----对String加密
- 移动端与服务器间加密通信
- AES加密示例
- Aes加密/解密示例
- Java AES加密示例
- AES加密示例
- iOS移动端使用AES加密注意事项
- AES 加密解密API
- DES/AES/MD5加密方法
- MD5 、AES加密、BASE64编码
- redis面试总结
- linux 的安装与配置
- EJB到底是什么?
- Android app中实现网络监听
- Leetcode 449 Serialize and Deserialize BST
- Android移动端与服务器api接口加密示例(AES,MD5,Token)
- GC知识点
- IoT小能手:家电状态显示及控制系统
- spark--Actions算子--countByKey
- Ubuntu14.04(32位)下Caffe(仅CPU模式)编译
- Maven创建Web项目
- PHP 出现解析json数据出错的问题
- python常用命令
- swarm