Commit 75b19064 by Mansoul

app sign util

parent afeedf26
......@@ -28,4 +28,7 @@ dependencies {
testImplementation 'junit:junit:4.12'
compileOnly 'com.facebook.android:account-kit-sdk:5.+'
api "com.squareup.okhttp3:okhttp:3.9.1"
}
package com.common.toolbox.app_utils;
import android.text.TextUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import okhttp3.Request;
/**
* @author Mansoul
* @create 2019/7/1 12:04
* @des
*/
public class HeadersUtil {
public static void signHeader(String signKey,
String deviceSign,
String sdSign,
Request request,
Request.Builder builder) {
try {
String random = UUID.randomUUID().toString();
//请求参数名参数值+appsecret+random
String sign = "";
String params = "";
if (TextUtils.equals(request.method(), "GET")) {
//参数名列表
List<String> paramNames = new ArrayList<>(request.url().queryParameterNames());
List<String> paramsKey = new ArrayList<>();
HashMap<String, String> paramsMap = new HashMap<>();
for (int i = 0; i < paramNames.size(); i++) {
String key = paramNames.get(i);
paramsKey.add(key);
paramsMap.put(key, request.url().queryParameterValue(i));
}
params = getParameter(paramsKey, paramsMap);
} else if (TextUtils.equals(request.method(), "POST")) {
List<String> paramsKey = new ArrayList<>(request.headers().names());
HashMap<String, String> paramsMap = new HashMap<>();
for (String key : paramsKey) {
paramsMap.put(key, request.headers().get(key));
}
params = getParameter(paramsKey, paramsMap);
}
String sdDeviceSign = "";
if (!TextUtils.isEmpty(deviceSign) && !TextUtils.isEmpty(sdSign)) {
sdDeviceSign = "deviceSign=" + deviceSign + "&sdSign=" + sdSign + "&";
}
sign = sdDeviceSign + params + signKey + random;
builder.addHeader("X-APP-SIGN", MD5Helper.md5Hex(sign));
builder.addHeader("X-APP-RANDOM", random);
builder.addHeader("X-DEVICE-SIGN", deviceSign);
builder.addHeader("X-SD-SIGN", sdSign);
} catch (Exception e) {
e.printStackTrace();
}
}
private static String getParameter(List<String> paramsKey, Map<String, String> params) {
//排序
Collections.sort(paramsKey);
StringBuilder sb = new StringBuilder();
for (String key : paramsKey) {
String value = params.get(key);
sb.append(sb.length() == 0 ? (key + "=" + value) : ("&" + key + "=" + value));
}
return sb.toString();
}
}
package com.common.toolbox.app_utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* MD5摘要算法
*
* @author Mansoul
* @date 2017/12/6 17:11
*/
public class MD5Helper {
private static final String HEX_CHARS = "0123456789abcdef";
private MD5Helper() {
throw new UnsupportedOperationException("Instantiation operation is not supported.");
}
static MessageDigest getDigest() {
try {
return MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException var1) {
throw new RuntimeException(var1);
}
}
public static byte[] md5(byte[] data) {
return getDigest().digest(data);
}
public static byte[] md5(String data) {
return md5(data.getBytes());
}
public static String md5Hex(byte[] data) {
return toHexString(md5(data));
}
public static String md5Hex(String data) {
return toHexString(md5(data));
}
public static String toHexString(byte[] b) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < b.length; ++i) {
sb.append("0123456789abcdef".charAt(b[i] >>> 4 & 15));
sb.append("0123456789abcdef".charAt(b[i] & 15));
}
return sb.toString();
}
public static byte[] toByteArray(String s) {
byte[] buf = new byte[s.length() / 2];
int j = 0;
for (int i = 0; i < buf.length; ++i) {
buf[i] = (byte) (Character.digit(s.charAt(j++), 16) << 4 | Character.digit(s.charAt(j++), 16));
}
return buf;
}
public static String appendParam(String returnStr, String paramId, String paramValue) {
if (!returnStr.equals("")) {
if (!paramValue.equals("")) {
returnStr = returnStr + "&" + paramId + "=" + paramValue;
}
} else if (!paramValue.equals("")) {
returnStr = paramId + "=" + paramValue;
}
return returnStr;
}
public static String appendParam_all(String returnStr, String paramId, String paramValue) {
if (!returnStr.equals("")) {
returnStr = returnStr + "&" + paramId + "=" + paramValue;
} else {
returnStr = paramId + "=" + paramValue;
}
return returnStr;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment