在我用到的网络请求里面需要用到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;
}