加密工具类(c#)
<pre><code> public class SignUtils
{
//编码格式
private static string inputCharset = &quot;utf-8&quot;;
/// &lt;summary&gt;
/// 生成请求时的签名
/// &lt;/summary&gt;
/// &lt;param name=&quot;sPara&quot;&gt;排序字典从a-z排序,字典中不能带sign和appsecret&lt;/param&gt;
/// &lt;param name=&quot;key&quot;&gt;&lt;/param&gt;
/// &lt;returns&gt;签名结果:32位md5小写&lt;/returns&gt;
public static string BuildSign(SortedDictionary&lt;string, string&gt; sPara, string key = &quot;&quot;)
{
//把数组所有元素,按照“参数=参数值”的模式用“&amp;”字符拼接成字符串
string prestr = CreateLinkString(sPara);
//把最终的字符串签名,获得签名结果
var mysign = Sign(prestr, key);
return mysign;
}
/// &lt;summary&gt;
/// 数据的UrlEncode编码
/// 不能用.NET自带的HttpUtility.UrlEncode参数,会导致JAVA不兼容
/// &lt;/summary&gt;
/// &lt;param name=&quot;str&quot;&gt;&lt;/param&gt;
/// &lt;param name=&quot;encoding&quot;&gt;&lt;/param&gt;
/// &lt;returns&gt;&lt;/returns&gt;
public static string UrlEncode(string str, Encoding encoding)
{
StringBuilder builder = new StringBuilder();
foreach (char c in str)
{
//转换空格到%20,兼容JAVA
if (c == ' ')
{
builder.Append(&quot;%20&quot;);
}
//转换成大写,兼容JAVA
else if (HttpUtility.UrlEncode(c.ToString()).Length &gt; 1)
{
builder.Append(HttpUtility.UrlEncode(c.ToString(), encoding).ToUpper());
}
else
{
builder.Append(c);
}
}
return builder.ToString();
}
/// &lt;summary&gt;
/// 把数组所有元素,按照“参数=参数值”的模式用“&amp;”字符拼接成字符串
/// &lt;/summary&gt;
/// &lt;param name=&quot;dicArray&quot;&gt;需要拼接的数组&lt;/param&gt;
/// &lt;returns&gt;拼接完成以后的字符串&lt;/returns&gt;
private static string CreateLinkString(SortedDictionary&lt;string, string&gt; dicArray)
{
StringBuilder prestr = new StringBuilder();
foreach (KeyValuePair&lt;string, string&gt; temp in dicArray)
{
prestr.Append(temp.Key + &quot;=&quot; + temp.Value + &quot;&amp;&quot;);
}
//去掉最後一個&amp;字符
int nLen = prestr.Length;
prestr.Remove(nLen - 1, 1);
return prestr.ToString();
}
/// &lt;summary&gt;
/// 签名字符串
/// &lt;/summary&gt;
/// &lt;param name=&quot;prestr&quot;&gt;需要签名的字符串&lt;/param&gt;
/// &lt;param name=&quot;key&quot;&gt;密钥&lt;/param&gt;
/// &lt;returns&gt;签名结果&lt;/returns&gt;
private static string Sign(string prestr, string key)
{
StringBuilder sb = new StringBuilder(32);
prestr = prestr + key;
MD5 md5 = new MD5CryptoServiceProvider();
byte[] t = md5.ComputeHash(Encoding.GetEncoding(inputCharset).GetBytes(prestr));
for (int i = 0; i &lt; t.Length; i++)
{
sb.Append(t[i].ToString(&quot;x&quot;).PadLeft(2, '0'));
}
return sb.ToString();
}
}</code></pre>