Example #1
0
 public override int GetHashCode()
 {
     unchecked
     {
         var hashCode = OrdinalComparer.GetHashCode(this.ValueFormat);
         hashCode = (hashCode * 397) ^ OrdinalComparer.GetHashCode(this.SymbolFormat);
         return(hashCode);
     }
 }
Example #2
0
 public override int GetHashCode()
 {
     unchecked
     {
         var hashCode = OrdinalComparer.GetHashCode(this.ValueFormat ?? string.Empty);
         hashCode = (hashCode * 397) ^ this.SymbolFormat.GetHashCode();
         hashCode = (hashCode * 397) ^ this.Unit.GetHashCode();
         return(hashCode);
     }
 }
Example #3
0
            public override bool Equals(object obj)
            {
                OrdinalComparer comp = obj as OrdinalComparer;

                if (comp != null)  //Comparer follows ignoreCase
                {
                    return(m_ignoreCase == comp.m_ignoreCase);
                }

                return(false);
            }
Example #4
0
        /// <summary>
        /// 数字签名-数组原文
        /// </summary>
        /// <param name="srcDataArr">数组原文(不包括接入渠道的密钥)</param>
        /// <returns></returns>
        public virtual string SignData(string[] srcDataArr)
        {
            if (string.IsNullOrWhiteSpace(this.Secret))
            {
                throw new Exception("请先设置内部密钥secret");
            }

            var tempList = srcDataArr.ToList();

            tempList.Add(this.Secret);
            OrdinalComparer comp    = new OrdinalComparer();
            var             tempArr = tempList.ToArray().OrderBy(t => t, comp);
            var             srcData = string.Join("", tempArr);

            return(this.SignData(srcData));
        }
        public static string GetSignature(List <KeyValuePair <string, string> > RequestPara)
        {
            RequestPara.Add(new KeyValuePair <string, string>("appSignKey", "R2xBNTNTVmxocTRIbm45V0lKeURZaW93RkpnQTIzUWV3OCtzejllL29ObXdUdVYwSWtXT0dnPT0="));

            StringBuilder sb = new StringBuilder();

            OrdinalComparer comp = new OrdinalComparer();
            //参数排序
            var keys = RequestPara.OrderBy(a => a.Key, comp);

            foreach (var a in keys)
            {
                sb.AppendFormat("&{0}={1}", a.Key, a.Value);
            }

            //加密
            return(GetSha1(sb.ToString().Substring(1)).ToLower());
        }
Example #6
0
 public override Boolean Equals(Object?obj) => OrdinalComparer.Equals(this, obj as FileNameWithoutExtension);
Example #7
0
        /// <summary>
        /// 验证数字签名
        /// </summary>
        /// <param name="appKey">应用Key</param>
        /// <param name="timeStamp">时间截</param>
        /// <param name="nonce">随机字符串</param>
        /// <param name="signature">签名串</param>
        /// <param name="extendDataArr">扩展签名数据</param>
        /// <returns></returns>
        public virtual Result VerifyData(string appKey, string timeStamp, string nonce, string signature, List <string> extendDataArr = null)
        {
            var res = new Result()
            {
                Title = "验证数字签名"
            };

            #region 验证参数完整性
            if (string.IsNullOrWhiteSpace(appKey))
            {
                res.Msg = "AppKey不能为空";
                return(res);
            }

            if (string.IsNullOrWhiteSpace(timeStamp))
            {
                res.Msg = "时间截不能为空";
                return(res);
            }

            if (string.IsNullOrWhiteSpace(nonce))
            {
                res.Msg = "随机串不能为空";
                return(res);
            }

            if (string.IsNullOrWhiteSpace(signature))
            {
                res.Msg = "签名不能为空";
                return(res);
            }
            #endregion

            if (GetSecretDelegate == null)
            {
                throw new Exception("获取内部密钥方法未实现");
            }

            var secret = GetSecretDelegate(appKey);

            if (string.IsNullOrWhiteSpace(secret))
            {
                res.Msg = "不是受权的应用,请勿非法操作!";
                return(res);
            }

            var tempList = new List <string> {
                secret, timeStamp, nonce
            };
            if (extendDataArr != null && extendDataArr.Count > 0)
            {
                tempList.AddRange(extendDataArr);
            }

            OrdinalComparer comp       = new OrdinalComparer();
            var             tempArr    = tempList.ToArray().OrderBy(t => t, comp);
            string          srcDataStr = string.Join("", tempArr);

            if (EncryptDelegate == null)
            {
                throw new Exception("加密方法未实现");
            }

            var tmpsignature = EncryptDelegate(srcDataStr);

            if (tmpsignature != signature)
            {
                res.Msg = string.Format("无效的数字签名。接收加密签名串:{0},原签名串:{1}, Api站点加密得到签名串:{2}", signature, srcDataStr, tmpsignature);

                return(res);
            }

            if (timeStamp.IsNumeric())
            {
                DateTime dtTime  = timeStamp.StampToDateTime();
                double   minutes = DateTime.Now.Subtract(dtTime).TotalMinutes;
                if (minutes > ExpiredMinutes)
                {
                    res.Msg = "签名时间戳失效";
                    return(res);
                }

                res.Success = true;
                res.Msg     = "验证数字签名成功";
            }

            return(res);
        }
Example #8
0
 public bool Equals(CompositeFormatKey other)
 {
     return(OrdinalComparer.Equals(this.CompositeFormat, other.CompositeFormat));
 }
Example #9
0
 public Int32 CompareTo(FileExtension?other) => OrdinalComparer.Compare(this, other);
Example #10
0
 public bool Equals(ValueAndSymbolFormatKey other)
 {
     return(OrdinalComparer.Equals(this.ValueFormat, other.ValueFormat) &&
            OrdinalComparer.Equals(this.SymbolFormat, other.SymbolFormat));
 }
Example #11
0
 public Boolean Equals(FileExtension?other) => OrdinalComparer.Equals(this, other);
Example #12
0
 public override int GetHashCode()
 {
     return(OrdinalComparer.GetHashCode(this.CompositeFormat ?? string.Empty));
 }
Example #13
0
            // Equals method for the comparer itself.
            public override bool Equals(object obj)
            {
                OrdinalComparer comparer = obj as OrdinalComparer;

                return(comparer != null && _ignoreCase == comparer._ignoreCase);
            }
Example #14
0
 public override Int32 GetHashCode() => OrdinalComparer.GetHashCode(this);
Example #15
0
 public override Boolean Equals(Object?obj) => OrdinalComparer.Equals(this, obj as FileName);
Example #16
0
 public Boolean Equals(FileName?other) => OrdinalComparer.Equals(this, other);
Example #17
0
 public Int32 CompareTo(FileName?other) => OrdinalComparer.Compare(this, other);
Example #18
0
        public async Task <AjaxResult <List <RQBankInfo> > > BankListAsync(RQBankListRequest rQBankListRequest)
        {
            AjaxResult <List <RQBankInfo> > ajaxResult = new AjaxResult <List <RQBankInfo> >();
            string bizData = JsonConvert.SerializeObject(rQBankListRequest);

            //实例化
            RQBaseRequest rQBaseRequest = new RQBaseRequest();

            rQBaseRequest.bizData = bizData;
            SortedDictionary <string, string> singKeyValuePairs = new SortedDictionary <string, string>
            {
                { "appId", rQBaseRequest.appId },
                { "signType", rQBaseRequest.signType },
                { "version", rQBaseRequest.version },
                { "timestamp", rQBaseRequest.timestamp },
                { "bizData", bizData }
            };
            string signParamsStr = OrdinalComparer.FormatParam(singKeyValuePairs);

            //请求如期签名
            string sign = _frRsaPkcs1Util.SignData(signParamsStr, HashAlgorithmName.MD5, RSASignaturePadding.Pkcs1);

            rQBaseRequest.sign = sign;

            var request = new HttpRequestMessage(HttpMethod.Post, RuqiConsts.Urls.BankList);

            HttpClient httpClient = _httpClientFactory.CreateClient(RuqiConsts.RuqiHttpClient);

            string contentStr = JsonConvert.SerializeObject(rQBaseRequest);

            request.Content = new StringContent(contentStr, Encoding.UTF8, "application/json");

            HttpResponseMessage response = await httpClient.SendAsync(request);

            if (!response.IsSuccessStatusCode)
            {
                ajaxResult.Success = false;
                ajaxResult.Content = "接口请求失败,请重试!";
            }
            else
            {
                string result = await response.Content.ReadAsStringAsync();

                //TODO:InsertAsync
                //ServiceParams rqParams = new ServiceParams
                //{
                //    JsonContext = result,
                //    ServiceType = (int)ServiceType.BankList,
                //    ServiceName = "BankList",
                //    AppId = "30002"
                //};

                //await _repository.InsertAsync(rqParams);
                var obj = JsonConvert.DeserializeObject <BaseResult <List <RQBankInfo> > >(result);

                if (obj.code.Equals(200))
                {
                    ajaxResult.Result = obj.data;
                }
                else
                {
                    ajaxResult.Success = false;
                    ajaxResult.Content = "请求失败,请重试!";
                }
            }
            return(ajaxResult);
        }