安卓之HTTPSMD5加密

在我用到的网络请求里面需要用到MD5加密,因为使用的是HTTPS,诚然是菜鸟的我并不懂太多,只有疯狂的寻找资料,最终解决了这一问题


MD5 大同小异


package com.xiaohongjiao.cookapp.rsa;


import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


@SuppressWarnings("unused")
public class MD5 {
 
private final static String[] strDigits = { "0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };


public MD5() {
}


 
private static String byteToArrayString(byte bByte) {
int iRet = bByte;
// System.out.println("iRet="+iRet);
if (iRet < 0) {
iRet += 256;
}
int iD1 = iRet / 16;
int iD2 = iRet % 16;
return strDigits[iD1] + strDigits[iD2];
}

 
private static String byteToNum(byte bByte) {
int iRet = bByte;
System.out.println("iRet1=" + iRet);
if (iRet < 0) {
iRet += 256;
}
return String.valueOf(iRet);
}


 
private static String byteToString(byte[] bByte) {
StringBuffer sBuffer = new StringBuffer();
for (int i = 0; i < bByte.length; i++) {
sBuffer.append(byteToArrayString(bByte[i]));
}
return sBuffer.toString();
}


public static String GetMD5Code(String strObj) {
String resultString = null;
try {
resultString = new String(strObj);
MessageDigest md = MessageDigest.getInstance("MD5");
 
resultString = byteToString(md.digest(strObj.getBytes()));
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
}
return resultString;
}

public static void main(String[] args) {
MD5 getMD5 = new MD5();
System.out.println(MD5.GetMD5Code("000000"));
}
}


之后用到了一些HTTPS的头加密需要2次“握手”就是双方建立连接

这是时间戳

/**
* 时间戳

* @return
*/
public static String GetTimestamp() {
return String.valueOf(System.currentTimeMillis());
}


public Map<String, String> getLocation(MainActivity mainActivity) {
return null;
}

  生成32位随机字符串

/**
* 生成32为随机字符串

* @return
*/
public static String GetNonceStr() {
String _str = "ABCDEFGHIJKLNMOPQRSTUVWXYZ0123456789abcdefghijklnmopqrstuvwxyz";
Random random = new Random();
StringBuffer sb = new StringBuffer();


for (int i = 0; i < _str.length(); ++i) {
int number = random.nextInt(32);// [0,62)


sb.append(_str.charAt(number));
}
return sb.toString().toLowerCase();
}


最后就是请求了

/** 发送token凭证 */
public static String PostToken(String deviceId, String appVersion,
String systemType, String deviceModel, String deviceName,
int screenWidth, int screenHeight) {
HttpClient httpclient = HttpClientHelper.getNewHttpClient();
HttpPost request = new HttpPost(ParameterConfig.tokenUrl);
// 先封装一个 JSON 对象
JSONObject param = new JSONObject();
try {
// 升序组合MD5
String token = "";
String nonce = GetNonceStr();
String timeStamp = GetTimestamp();
String paramStr = "";
ArrayList<String> params = new ArrayList<String>();
params.add(token);
params.add(nonce);
params.add(timeStamp);
Collections.sort(params);
for (int i = 0; i < params.size(); i++) {
paramStr += params.get(i);
}
String privataKey = ParameterConfig.privataKey;
paramStr = paramStr + privataKey;
String Signature = MD5.GetMD5Code(paramStr);
request.addHeader("token", token);
request.addHeader("nonce", nonce);
request.addHeader("timeStamp", timeStamp);
request.addHeader("signature", Signature);
param.put("deviceId", deviceId);
param.put("appVersion", appVersion);
param.put("systemType", systemType);
param.put("deviceModel", deviceModel);
param.put("deviceName", deviceName);
param.put("screenWidth", screenWidth);
param.put("screenHeight", screenHeight);
// 绑定到请求 Entry
StringEntity se = new StringEntity(param.toString());
request.setEntity(se);
// 发送请求
HttpResponse response;
response = httpclient.execute(request);
// 检验状态码,如果成功接收数据
int code = response.getStatusLine().getStatusCode();
if (code == 200) {
String rev = EntityUtils.toString(response.getEntity());
// 返回json格式: {"id": "27JpL~j4vsL0LX00E00005","version": "abc"}
System.out.println(rev + "11111111");
return rev;
} else {
String rev = EntityUtils.toString(response.getEntity());
System.out.println(rev + "11111111");
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值