129 lines
3.8 KiB
Plaintext
129 lines
3.8 KiB
Plaintext
package com.nationalelectric.greenH5.identityAuth.util;
|
||
|
||
import com.nationalelectric.greenH5.identityAuth.util.devon.Assertion;
|
||
import com.nationalelectric.greenH5.identityAuth.util.devon.secure.Md5Utils;
|
||
|
||
import javax.servlet.http.HttpServletRequest;
|
||
import java.io.UnsupportedEncodingException;
|
||
import java.net.URLEncoder;
|
||
import java.util.Enumeration;
|
||
import java.util.HashMap;
|
||
import java.util.Map;
|
||
import java.util.TreeMap;
|
||
|
||
/**
|
||
* HMAC: upperCase(hash(urlEncode(query + "&appKey=MyAppKey", "UTF-8")))
|
||
*
|
||
* @author <a href="mailto:93785732@qq.com">ZhengDaHong@fzfx</a>
|
||
* @since 2018/1/31 17:02
|
||
* @see javax.crypto.Mac Don't use Java standard algorithmn, because of not in favor of cross-platform
|
||
*/
|
||
// TODO: 2018/4/3 Add 'timestamp' factor to expiration validation
|
||
//public abstract class SignatureUtils {
|
||
public class SignatureUtils2 {
|
||
private static final String ENCODING = "UTF-8";
|
||
|
||
static final String PARAMETER_SIGNATURE = "signature";
|
||
|
||
static final String PARAMETER_SIGNATURE_TYPE = "signatureType";
|
||
|
||
private static final String[] NON_SIGNATURE_FACTORS = {
|
||
PARAMETER_SIGNATURE
|
||
};
|
||
|
||
|
||
|
||
|
||
|
||
public static String aaa(){
|
||
return "aaa";
|
||
}
|
||
|
||
/**
|
||
* Convenience method for {@link #buildSignature(TreeMap, String, SignatureType)} to accepting any {@code Map}s
|
||
* @since 2018/04/19 11:42
|
||
*/
|
||
public static String buildSignature2(Map<String, String> orderingMap, String appKey, String signatureType) throws Exception {
|
||
System.out.println("10000000000000000");
|
||
TreeMap<String, String> orderingMapToUse;
|
||
System.out.println("123333334354ty53uterhfgsd");
|
||
if(orderingMap instanceof TreeMap){
|
||
System.out.println(";lkjhgfdsadfghgf");
|
||
orderingMapToUse = (TreeMap<String, String>) orderingMap;
|
||
}
|
||
else{
|
||
System.out.println("auisldasdkasfsjk");
|
||
orderingMapToUse = new TreeMap<String, String>(orderingMap);
|
||
}
|
||
// return buildSignature3(orderingMapToUse, appKey, signatureType);
|
||
return buildSignature4(orderingMapToUse, appKey, signatureType);
|
||
// return aaa();
|
||
}
|
||
|
||
public static String buildSignature4(TreeMap<String, String> orderingMap, String appKey, String signatureType) {
|
||
StringBuilder stringToSign = new StringBuilder(orderingMap.size() * 10);
|
||
boolean first = true;
|
||
outer: for (Map.Entry<String, String> entry : orderingMap.entrySet()) {
|
||
for (String nonSignatureFactor : NON_SIGNATURE_FACTORS) {
|
||
if(nonSignatureFactor.equals(entry.getKey())){
|
||
continue outer;
|
||
}
|
||
}
|
||
|
||
if(!first){
|
||
stringToSign.append('&');
|
||
}else{
|
||
first = false;
|
||
}
|
||
|
||
stringToSign.append(entry.getKey()).append('=').append(entry.getValue());
|
||
}
|
||
stringToSign.append("&appKey=").append(appKey);
|
||
|
||
try {
|
||
// 通过URL-encoding得到ASCII字符(兼容),因此不惧在任何时候的getBytes()
|
||
return Md5Utils.md5WithUpperCase(URLEncoder.encode(stringToSign.toString(), ENCODING));
|
||
} catch (Exception impossible) {
|
||
return null;
|
||
}
|
||
|
||
|
||
|
||
}
|
||
|
||
public static String buildSignature3(TreeMap<String, String> orderingMap, String appKey, String signatureType) {
|
||
StringBuilder stringToSign = new StringBuilder(orderingMap.size() * 10);
|
||
boolean first = true;
|
||
outer: for (Map.Entry<String, String> entry : orderingMap.entrySet()) {
|
||
for (String nonSignatureFactor : NON_SIGNATURE_FACTORS) {
|
||
if(nonSignatureFactor.equals(entry.getKey())){
|
||
continue outer;
|
||
}
|
||
}
|
||
|
||
if(!first){
|
||
stringToSign.append('&');
|
||
}else{
|
||
first = false;
|
||
}
|
||
|
||
stringToSign.append(entry.getKey()).append('=').append(entry.getValue());
|
||
}
|
||
stringToSign.append("&appKey=").append(appKey);
|
||
|
||
switch (signatureType){
|
||
case "MD5":{
|
||
try {
|
||
// 通过URL-encoding得到ASCII字符(兼容),因此不惧在任何时候的getBytes()
|
||
return Md5Utils.md5WithUpperCase(URLEncoder.encode(stringToSign.toString(), ENCODING));
|
||
} catch (UnsupportedEncodingException impossible) {
|
||
}
|
||
}
|
||
default: return null;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
}
|