//签名验证
public static bool CheckSign(Dictionary<string, string> map, string sign)
{
Dictionary<string, string> mapNew = paraFilter(map);
string preSignStr = createLinkstring(mapNew);
return FuYouSign.verify(preSignStr, Const.publicKey, sign);
}
//根据响应报文生成签名原文
public static Dictionary<string, string> paraFilter(Dictionary<string, string> map)
{
Dictionary<string, string> result = new Dictionary<string, string>();
if (map == null || map.Count() <= 0)
{
return result;
}
foreach (string key in map.Keys)
{
string value = map[key];
if (key.Equals("sign", StringComparison.CurrentCultureIgnoreCase) || (key.Length >= 8 && key.Substring(0, 8).Equals("reserved", StringComparison.CurrentCultureIgnoreCase)))
{
continue;
}
result.Add(key, value);
}
return result;
}
//利用公钥进行签名验证
public static bool verify(string srcSignPacket, string publicKey,string sign)
{
try
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] messagebytes= Encoding.GetEncoding(Const.charset).GetBytes(srcSignPacket);
rsa.FromXmlString(RSAConverter.RSAPublicKeyJava2DotNet(Const.publicKey));
byte[] AOutput= Convert.FromBase64String(sign);
bool bVerify = rsa.VerifyData(messagebytes, "MD5", AOutput);
return bVerify;
}
catch (Exception)
{
return false;
throw;
}
}