一段java加密代码不理解,求指点
加密的函数
public static String a(HashMap<String, String> paramHashMap, String paramString)
{
Object localObject1 = new LinkedHashMap();
Object localObject2 = paramHashMap.keySet().toArray();
Arrays.sort((Object[])localObject2);
int j = localObject2.length;
int i = 0;
for (;;)
{
if (i < j)
{
Object localObject3 = localObject2[i];
try
{
((LinkedHashMap)localObject1).put(localObject3.toString(), URLEncoder.encode(((String)paramHashMap.get(localObject3)).toString(), "UTF-8"));
i++;
}
catch (UnsupportedEncodingException localUnsupportedEncodingException)
{
for (;;)
{
localUnsupportedEncodingException.printStackTrace();
}
}
}
}
paramHashMap = new StringBuilder();
localObject2 = ((LinkedHashMap)localObject1).entrySet().iterator();
while (((Iterator)localObject2).hasNext())
{
localObject1 = (Map.Entry)((Iterator)localObject2).next();
if (paramHashMap.length() > 0) {
paramHashMap.append("&");
}
paramHashMap.append((String)((Map.Entry)localObject1).getKey());
paramHashMap.append("=");
paramHashMap.append((String)((Map.Entry)localObject1).getValue());
}
paramHashMap = MD5.md5(paramHashMap.toString().replace("*", "%2A").replace("%7E", "~").replace("+", "%20"));
localObject1 = new StringBuilder();
((StringBuilder)localObject1).append(paramHashMap);
((StringBuilder)localObject1).append("c7830e4a5ef70ce3573c1d330d435629");
((StringBuilder)localObject1).append(paramString);
return MD5.md5(((StringBuilder)localObject1).toString());
}
调用的函数
public RequestParams a(RequestParams paramRequestParams, String paramString)
{
RequestParams localRequestParams = new RequestParams();
localRequestParams.put("siteid", "10001");
localRequestParams.put("clientid", "1");
localRequestParams.put("ip", AppUtil.getLocalIP());
localRequestParams.put("system_name", "android");
localRequestParams.put("modules", paramString);
long l = System.currentTimeMillis();
localRequestParams.put("type", "android");
paramString = new HashMap(localRequestParams.getURLHashMap());
paramString.putAll(paramRequestParams.getURLHashMap());
localRequestParams.put("sign", a(paramString, l + ""));
localRequestParams.put("time", l + "");
return localRequestParams;
}
按照我的理解,加密的逻辑是 先把url中的参数排序依次,然后顺序用&符号拼接,产生一个字符串(拼接过程中把value进行urlencode)产生字符串A
比如:clientid=1&ip=10.0.2.15&modules=menu%3a1&siteid=10001&system_name=android&type=android
然后把得到的长字符串A进行一次MD5运算,得到结果B
接着,在字符串B的后面加上代码中的一个固定salt,以及一个时间戳,产生一个新的字符串C
最后,把字符串C进行一次MD5运算,就得到了最终结果 sign
通过抓包得到的有效数据:
sign=0c06a79057226b0609293277307a4ec7&clientid=1&time=1505490330305&system_name=android&siteid=10001&type=android&modules=menu:1&ip=10.0.2.15
但是,我自己按照以上逻辑始终不能得到正确的sign,不知道是我哪里理解错误了.希望各位Java大神能指点一下