コード例 #1
0
        /// <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));
        }
コード例 #2
0
        /// <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));
        }
コード例 #3
0
        /// <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));
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        /// <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));
        }
コード例 #8
0
        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);
        }