using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace SDKCSharp.Utility
{
///
/// 签名工具类
///
public static class SignUtil
{
///
/// 构建签名
///
/// The sign.
/// 参数.
/// 私钥.
/// 字符集.
/// 签名类型.
public static string CreateSign(IDictionary parameters, string privateKey, Encoding charset, SignType signType)
{
RSAHelper rsa = new RSAHelper(signType, charset, privateKey, null);
string content = GetSignContent(parameters);
return rsa.Sign(content);
}
public static bool RsaCheck(string content, string sign, string publicKeyPlatform, Encoding charset,
SignType signType)
{
RSAHelper rsa = new RSAHelper(signType, charset, null, publicKeyPlatform);
return rsa.Verify(content, sign);
}
///
/// 构建签名内容
///
/// The sign content.
/// Parameters.
public static string GetSignContent(IDictionary parameters)
{
// 第一步:把字典按Key的字母顺序排序
IDictionary sortedParams = new SortedDictionary(parameters);
IEnumerator> dem = sortedParams.GetEnumerator();
// 第二步:把所有参数名和参数值串在一起
StringBuilder query = new StringBuilder("");
while (dem.MoveNext())
{
string key = dem.Current.Key;
string value = dem.Current.Value;
if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
{
query.Append(key).Append("=").Append(value).Append("&");
}
}
string content = query.ToString().Substring(0, query.Length - 1);
return content;
}
///
/// 构建签名内容
///
/// The sign content.
/// Parameters.
public static string GetSignContentObject(IDictionary parameters)
{
// 第一步:把字典按Key的字母顺序排序
IDictionary sortedParams = new SortedDictionary(parameters);
IEnumerator> dem = sortedParams.GetEnumerator();
// 第二步:把所有参数名和参数值串在一起
StringBuilder query = new StringBuilder("");
while (dem.MoveNext())
{
string key = dem.Current.Key;
string value = Convert.ToString(dem.Current.Value);
value = Regex.Replace(value, @"\s", "");
if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
{
query.Append(key).Append("=").Append(value).Append("&");
}
}
string content = query.ToString().Substring(0, query.Length - 1);
return content;
}
}
}