直接看图吧~~
/// <summary>
/// 请求MD5
/// </summary>
/// <returns></returns>
public void RequestSignMD5()
{
// 请求
String apiKey = "apiKey"; // 约定的秘钥1
String apiSecret = "apiSecret"; // 约定的秘钥2
String timeStamp = DateTime.Now.ToString("yyyyMMddHHmmss"); // 约定的秘钥3
String signData = apiKey + apiSecret + timeStamp; // 秘钥串
String parameter = "THIS IS PARAMETER!"; // 参数串
String SignParameterMD5 = parameter + signData;
String MD5Str = md5(SignParameterMD5); // 生成MD5
bool IsTrue = ResponseSignMD5(parameter, MD5Str, timeStamp); //验签成功则为TRUE
}
/// <summary>
/// 响应MD5
/// </summary>
/// <param name="parameter">参数串</param>
/// <param name="MD5Data">MD5</param>
/// <param name="timeStamp">时间戳</param>
/// <returns></returns>
public bool ResponseSignMD5(String parameter, String MD5Data,String timeStamp)
{
// 响应
String apiKey = "apiKey"; // 约定的秘钥1
String apiSecret = "apiSecret"; // 约定的秘钥2
String signData = apiKey + apiSecret + timeStamp; // 秘钥串(拼接约定的秘钥形成秘钥串)
String SignParameterMD5 = parameter + signData;
String MD5Str = md5(SignParameterMD5); // 生成MD5
if (MD5Str == MD5Data) // 验签成功
{
return true;
}
return false;
}
/// <summary>
/// 生成MD5
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public string md5(string str)
{
try
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] bytValue, bytHash;
bytValue = System.Text.Encoding.UTF8.GetBytes(str);
bytHash = md5.ComputeHash(bytValue);
md5.Clear();
string sTemp = "";
for (int i = 0; i < bytHash.Length; i++)
{
sTemp += bytHash[i].ToString("X").PadLeft(2, '0');
}
str = sTemp.ToLower();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
return str;
}
签名:
String MD5Str = MD5(参数串 + 秘钥串)
请求参数(参数串 + MD5Str)
验签:
接收参数(参数串 + MD5Str)
// 开始根据参数串 + 约定好的秘钥串生成MD5
String SignData = MD5(参数串 + 秘钥串(拼接约定好的秘钥))
// 进行MD5的对比,结果为TRUE则验签成功
Bool isTrue = SignData == MD5Str