private static string BuildDataString(NameValuePair[] parameters) { if (parameters == null) { throw new ArgumentNullException("parameters"); } var builder = new StringBuilder(); var orderedParameters = parameters.Where(p => string.IsNullOrEmpty(p.Name) && !string.IsNullOrEmpty(p.Value)) .Union( parameters.Where(p => !string.IsNullOrEmpty(p.Name) && !string.IsNullOrEmpty(p.Value)) .OrderBy(i => i.Name)) .ToList(); foreach (var parameter in orderedParameters) { if (builder.Length > 0) { builder.Append(ParameterSeparator); } if (!string.IsNullOrEmpty(parameter.Name)) { builder.Append(parameter.Name); builder.Append(NameValueSeparator); } builder.Append(parameter.Value); } var data = builder.ToString(); return data; }
public static string GetHashString(Func<byte[], HMAC> hmacFactory, string secretKey, NameValuePair[] parameters) { var data = BuildDataString(parameters); return ComputeHash(hmacFactory, secretKey, data); }