/// <summary> /// 生成签名 /// </summary> /// <param name="coll"></param> /// <param name="secrect"></param> /// <param name="setting"></param> /// <returns></returns> public static string BuildSign(NameValueCollection coll, string secrect, BuildSettingModel setting) { SortedDictionary <string, string> inputPara = new SortedDictionary <string, string>(); foreach (string s in coll.AllKeys) { if (!inputPara.ContainsKey(s)) { inputPara.Add(s, coll[s]); } } return(BuildSign(inputPara, secrect, setting)); }
/// <summary> /// 生成带签名的参数串 /// </summary> /// <param name="inputPara"></param> /// <param name="secrect">Secrect</param> /// <returns></returns> public static string BuildSignStr(Dictionary <string, string> inputPara, string secrect) { SortedDictionary <string, string> sortedInputPara = Convert(inputPara); BuildSettingModel setting = new BuildSettingModel() { JoinFormat = PreSignStrJoinFormatOptions.UrlParameter, EcryptType = EncryptTypeOptions.MD5_UTF8_32, SaltPosition = SaltAppendPositionOptions.Suffix }; //获取待签名字符串 string preSignStr = GetPreSignStr(sortedInputPara, setting, secrect); //生成sign return(GetPreSignStr(sortedInputPara, setting) + "&sign=" + GetSign(preSignStr, setting)); }
/// <summary> /// 生成签名 /// </summary> /// <param name="inputPara">字典</param> /// <param name="salt">秘钥</param> /// <param name="setting">生成的设置</param> /// <returns></returns> public static string BuildSign(SortedDictionary <string, string> inputPara, string salt, BuildSettingModel setting) { if (setting == null) { setting = new BuildSettingModel() { JoinFormat = PreSignStrJoinFormatOptions.UrlParameter, EcryptType = EncryptTypeOptions.MD5_32, SaltPosition = SaltAppendPositionOptions.Suffix }; } //获取待签名字符串 string preSignStr = GetPreSignStr(inputPara, setting, salt); //LogHelper.Write("加密的字符串->:" + preSignStr); //生成sign return(GetSign(preSignStr, setting)); }
/// <summary> /// 获取返回时的签名验证结果(用xxx=xxx&aaa=bbb连接,salt加在尾部,32位md5) /// </summary> /// <param name="inputPara"></param> /// <param name="sign"></param> /// <param name="salt"></param> /// <param name="setting"></param> /// <returns></returns> public static bool VerifySign(SortedDictionary <string, string> inputPara, string sign, string salt, BuildSettingModel setting) { if (setting == null) { setting = new BuildSettingModel() { JoinFormat = PreSignStrJoinFormatOptions.UrlParameter, EcryptType = EncryptTypeOptions.MD5_32, SaltPosition = SaltAppendPositionOptions.Suffix }; } //获取待签名字符串 string preSignStr = GetPreSignStr(inputPara, setting, salt); string localSign = GetSign(preSignStr, setting); if (localSign.Equals(sign, StringComparison.CurrentCultureIgnoreCase)) { return(true); } return(false); }
private static string GetSign(string preSignStr, BuildSettingModel setting) { string sign = ""; switch (setting.EcryptType) { case EncryptTypeOptions.MD5_16: sign = EncryptHelper.MD5_8(preSignStr); break; case EncryptTypeOptions.MD5_32: sign = EncryptHelper.MD5(preSignStr); break; case EncryptTypeOptions.MD5_UTF8_32: sign = EncryptHelper.MD5_8(preSignStr); break; default: sign = EncryptHelper.MD5(preSignStr); break; } return(sign); }
private static string GetPreSignStr(SortedDictionary <string, string> inputPara, BuildSettingModel setting, string salt) { //过滤空值、sign与sign_type参数 Dictionary <string, string> sPara = FilterPara(inputPara); //根据连接方式设置 string preSignStr = ""; switch (setting.JoinFormat) { case PreSignStrJoinFormatOptions.None: preSignStr = CreateSeamlessString(sPara); break; case PreSignStrJoinFormatOptions.UrlParameter: preSignStr = CreateLinkString(sPara); break; default: preSignStr = CreateLinkString(sPara); break; } //秘钥位置 switch (setting.SaltPosition) { case SaltAppendPositionOptions.Prefix: preSignStr = salt + preSignStr; break; case SaltAppendPositionOptions.Suffix: preSignStr = preSignStr + salt; break; case SaltAppendPositionOptions.ALL: preSignStr = salt + preSignStr + salt; break; default: preSignStr = preSignStr + salt; break; } return(preSignStr); }
/// <summary> /// 生成签名 /// </summary> /// <param name="inputPara">字典</param> /// <param name="salt">秘钥</param> /// <param name="setting">生成的设置</param> /// <returns></returns> public static string BuildSign(Dictionary <string, string> inputPara, string salt, BuildSettingModel setting) { SortedDictionary <string, string> sortedInputPara = Convert(inputPara); return(BuildSign(sortedInputPara, salt, setting)); }
private static string GetPreSignStr(SortedDictionary <string, string> inputPara, BuildSettingModel setting) { //过滤空值、sign与sign_type参数 Dictionary <string, string> sPara = FilterPara(inputPara); //根据连接方式设置 string preSignStr = ""; switch (setting.JoinFormat) { case PreSignStrJoinFormatOptions.None: preSignStr = CreateSeamlessString(sPara); break; case PreSignStrJoinFormatOptions.UrlParameter: preSignStr = CreateLinkString(sPara); break; default: preSignStr = CreateLinkString(sPara); break; } return(preSignStr); }