package com.
*
*
*
*
*
*
*
.hmdd.spider.cmptr.xxxxxxxxxx;
import
javax.crypto.Mac;
import
javax.crypto.spec.SecretKeySpec;
import
java.security.InvalidKeyException;
import
java.security.NoSuchAlgorithmException;
import
java.util.HashMap;
import
java.util.Iterator;
import
java.util.
Map
;
import
java.util.TreeSet;
public
class
xxxxxxxxxxTestSign {
public static void main(String[] args) {
String postBody
=
"commonExtend=&loginType=4&sign=a992b4c32cb9e81500ea37adb4dfbc8a63a661bb3a290c4fdb39abf4d752d4ac&screen=1794*1080&d_brand=LGE&body={\"commonExtend\":\"\",\"data\":{\"lon\":\"xxx.02877\",\"lat\":\"xx.278442\"},\"appName\":\"xxxxxxx\",\"screen\":\"1794*1080\",\"lon\":\"xxx.02877\",\"platformId\":\"1\",\"clientVersion\":\"3.6.4\",\"storeId\":\"232686\",\"recommendSwitch\":\"true\",\"eu\":\"8646C6D4A785B424\",\"fv\":\"937385A766E41727\",\"osVersion\":\"8.1.0\",\"partner\":\"huawei\",\"v\":2,\"tenantId\":\"1\",\"client\":\"android\",\"clientVersionBuild\":\"2110251117\",\"model\":\"Nexus5X\",\"networkType\":\"wifi\",\"brand\":\"LGE\",\"lat\":\"xxx.278442\"}&clientVersion=3.6.4&eu=8646C6D4A785B424&fv=937385A766E41727&d_model=Nexus5X&functionId=xxxxxxx_platform_address_getPosition&t=1636963490297&partner=huawei&osVersion=8.1.0&build=2110251117&appid=****fresh_APP&client=xxxxxxx_android&lang=zh_CN&networkType=wifi"
;
String[] kvStr
=
postBody.split(
"&"
);
Map
<String, String>
map
=
new HashMap<>();
for
(String kv : kvStr) {
String[] cell
=
kv.split(
"="
);
if
(cell.length
=
=
2
) {
map
.put(cell[
0
], cell[
1
]);
}
}
String sign
=
signature(
map
, SALT);
System.out.println(
"sign = "
+
sign);
}
public static final String SALT
=
"fa5010c35exxxxxxx40060d65d3f3801"
;
public static String signature(
Map
<String, String>
map
, String
str
) {
if
(
map
=
=
null ||
map
.isEmpty() ||
str
=
=
null ||
str
.length()
=
=
0
) {
return
null;
}
TreeSet treeSet
=
new TreeSet();
for
(String str2 :
map
.keySet()) {
treeSet.add(str2);
}
StringBuffer stringBuffer
=
new StringBuffer();
Iterator it
=
treeSet.iterator();
while
(it.hasNext()) {
String key
=
it.
next
().toString();
if
(
"sign"
.equals(key)) {
continue
;
}
String value
=
map
.get(key);
if
(value
=
=
null || value.length()
=
=
0
) {
continue
;
}
stringBuffer.append(value);
stringBuffer.append(
"&"
);
}
String stringBuffer2
=
stringBuffer.toString();
if
(stringBuffer2.endsWith(
"&"
) && stringBuffer2.length() >
1
) {
stringBuffer2
=
stringBuffer2.substring(
0
, stringBuffer2.length()
-
1
);
}
return
HMACSHA256(strToByteArray(stringBuffer2), strToByteArray(
str
));
}
private static String HMACSHA256(byte[] bArr, byte[] bArr2) {
try
{
SecretKeySpec secretKeySpec
=
new SecretKeySpec(bArr2,
"HmacSHA256"
);
Mac instance
=
Mac.getInstance(
"HmacSHA256"
);
instance.init(secretKeySpec);
return
byte2hex(instance.doFinal(bArr));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return
null;
} catch (InvalidKeyException e2) {
e2.printStackTrace();
return
null;
}
}
public static String byte2hex(byte[] bArr) {
StringBuilder sb
=
new StringBuilder();
int
i
=
0
;
while
(bArr !
=
null && i < bArr.length) {
String hexString
=
Integer.toHexString(bArr[i] &
255
);
if
(hexString.length()
=
=
1
) {
sb.append(
'0'
);
}
sb.append(hexString);
i
+
+
;
}
return
sb.toString().toLowerCase();
}
public static byte[] strToByteArray(String
str
) {
if
(
str
=
=
null) {
return
null;
}
return
str
.getBytes();
}
}