/// <summary> /// Generates a MD5 signature for the facebook session. /// </summary> /// <param name="secret"> /// The app secret. /// </param> /// <param name="dictionary"> /// The dictionary. /// </param> /// <returns> /// Returns the generated signature. /// </returns> /// <remarks> /// http://developers.facebook.com/docs/authentication/ /// </remarks> internal static string GenerateSessionSignature(string secret, IDictionary <string, object> dictionary) { Contract.Requires(!string.IsNullOrEmpty(secret)); Contract.Requires(dictionary != null); Contract.Ensures(!string.IsNullOrEmpty(Contract.Result <string>())); var payload = new StringBuilder(); // sort by the key and remove "sig" if present var parts = (from a in dictionary orderby a.Key where a.Key != "sig" select string.Format(CultureInfo.InvariantCulture, "{0}={1}", a.Key, a.Value)).ToList(); parts.ForEach(s => payload.Append(s)); payload.Append(secret); var hash = FacebookUtils.ComputerMd5Hash(Encoding.UTF8.GetBytes(payload.ToString())); var signature = new StringBuilder(); foreach (var h in hash) { signature.Append(h.ToString("x2", CultureInfo.InvariantCulture)); } return(signature.ToString()); }