public static void SignByCertInfo(Dictionary <string, string> dictionary, string certId, ICipherParameters key)
        {
            if (!dictionary.ContainsKey("signMethod"))
            {
                throw new UnionPayException("signMethod must Not null");
            }

            if (!dictionary.ContainsKey("version"))
            {
                throw new UnionPayException("version must Not null");
            }

            var signMethod = dictionary["signMethod"];

            if ("01" == signMethod)
            {
                dictionary["certId"] = certId;

                var stringData       = GetSignContent(dictionary, true, false);
                var stringSignDigest = SHA256.Compute(stringData);
                var stringSign       = SHA256WithRSA.SignData(stringSignDigest, key);

                //设置签名域值
                dictionary["signature"] = stringSign;
            }
            else
            {
                throw new UnionPayException("Error signMethod [" + signMethod + "] in SignByCertInfo. ");
            }
        }
Esempio n. 2
0
        private async Task CheckNotifySignAsync(WeChatPayHeaders headers, string body, WeChatPayOptions options)
        {
            if (string.IsNullOrEmpty(headers.Serial))
            {
                throw new WeChatPayException($"sign check fail: {nameof(headers.Serial)} is empty!");
            }

            if (string.IsNullOrEmpty(headers.Signature))
            {
                throw new WeChatPayException($"sign check fail: {nameof(headers.Signature)} is empty!");
            }

            if (string.IsNullOrEmpty(body))
            {
                throw new WeChatPayException("sign check fail: body is empty!");
            }

            var cert = await _platformCertificateManager.LoadCertificateAsync(_client, options, headers.Serial);

            var signSourceData = WeChatPayUtility.BuildSignatureSourceData(headers.Timestamp, headers.Nonce, body);
            var signCheck      = SHA256WithRSA.Verify(cert.Certificate.GetRSAPublicKey(), signSourceData, headers.Signature);

            if (!signCheck)
            {
                throw new WeChatPayException("sign check fail: check Sign and Data Fail!");
            }
        }
        public static void SignByCertInfo(Dictionary <string, string> reqData, string certId, AsymmetricKeyParameter parameters)
        {
            if (!reqData.ContainsKey("signMethod"))
            {
                throw new Exception("signMethod must Not null");
            }
            var signMethod = reqData["signMethod"];

            if (!reqData.ContainsKey("version"))
            {
                throw new Exception("version must Not null");
            }
            var version = reqData["version"];

            if ("01".Equals(signMethod))
            {
                reqData["certId"] = certId;

                var stringData       = GetSignContent(reqData, true, false);
                var stringSignDigest = SHA256.Compute(stringData);
                var stringSign       = SHA256WithRSA.SignData(stringSignDigest, parameters);

                //设置签名域值
                reqData["signature"] = stringSign;
            }
            else
            {
                throw new Exception("Error signMethod [" + signMethod + "] in SignByCertInfo. ");
            }
        }
Esempio n. 4
0
 public static string RSASignContent(string data, string privateKey, string signType)
 {
     return(signType switch
     {
         "RSA1" => SHA1WithRSA.Sign(data, privateKey),
         "RSA2" => SHA256WithRSA.Sign(data, privateKey),
         _ => SHA1WithRSA.Sign(data, privateKey),
     });
Esempio n. 5
0
        public static bool RSACheckContent(string data, string sign, string publicKey, string signType)
        {
            var key = RSAUtilities.GetRSAParametersFormPublicKey(publicKey);

            switch (signType)
            {
            case "RSA2":
                return(SHA256WithRSA.Verify(data, sign, key));

            default:
                return(SHA1WithRSA.Verify(data, sign, key));
            }
        }
Esempio n. 6
0
        public static string RSASignContent(string data, string privateKey, string signType)
        {
            var key = RSAUtilities.GetRSAParametersFormRsaPrivateKey(privateKey);

            switch (signType)
            {
            case "RSA2":
                return(SHA256WithRSA.Sign(data, key));

            default:
                return(SHA1WithRSA.Sign(data, key));
            }
        }
Esempio n. 7
0
        public static bool RSACheckContent(string data, string sign, string publicKey, string signType)
        {
            switch (signType)
            {
            case "RSA1":
                return(SHA1WithRSA.Verify(data, sign, publicKey));

            case "RSA2":
                return(SHA256WithRSA.Verify(data, sign, publicKey));

            default:
                return(SHA1WithRSA.Verify(data, sign, publicKey));
            }
        }
Esempio n. 8
0
        public static string RSASignContent(string data, string privateKey, string signType)
        {
            switch (signType)
            {
            case "RSA1":
                return(SHA1WithRSA.Sign(data, privateKey));

            case "RSA2":
                return(SHA256WithRSA.Sign(data, privateKey));

            default:
                return(SHA1WithRSA.Sign(data, privateKey));
            }
        }
Esempio n. 9
0
        private static void SHA256WithRSA_Sample()
        {
            var s = "hello sha256 with rsa";

            Console.WriteLine(s);

            var keyParameter = RSAKeyGenerator.Pkcs8(2048);

            Console.WriteLine("私钥:");
            Console.WriteLine(keyParameter.PrivateKey);
            Console.WriteLine("公钥:");
            Console.WriteLine(keyParameter.PublicKey);

            Console.WriteLine();

            Console.WriteLine("使用BouncyCastle:");

            var sign1 = SHA256WithRSA.GenerateSignature(s,
                                                        AsymmetricKeyUtilities.GetAsymmetricKeyParameterFormAsn1PrivateKey(keyParameter.PrivateKey));

            Console.WriteLine("sign1:");
            Console.WriteLine(sign1);

            var verified1 = SHA256WithRSA.VerifySignature(s, sign1,
                                                          AsymmetricKeyUtilities.GetAsymmetricKeyParameterFormPublicKey(keyParameter.PublicKey));

            Console.WriteLine("验证结果:");
            Console.WriteLine(verified1 ? "signature verified" : "signature not verified");
            Console.WriteLine();

            Console.WriteLine("不使用BouncyCastle:");

            var sign2 = SHA256WithRSA.GenerateSignature(s,
                                                        AsymmetricKeyUtilities.GetRsaParametersFormAsn1PrivateKey(keyParameter.PrivateKey));

            Console.WriteLine("sign2:");
            Console.WriteLine(sign2);

            var verified2 = SHA256WithRSA.VerifySignature(s, sign1,
                                                          AsymmetricKeyUtilities.GetAsymmetricKeyParameterFormPublicKey(keyParameter.PublicKey));

            Console.WriteLine("验证结果:");

            Console.WriteLine(verified2 ? "signature verified" : "signature not verified");
            Console.WriteLine();
        }
Esempio n. 10
0
        private void CreateSignedXML(string filename, string root, WidgetDigSig role, string pkcs12, string password)
        {
            pkcs12 = Path.GetFullPath(pkcs12);

            if (string.IsNullOrEmpty(password))
            {
                password = Utility.AskPassword($"Insert Password of {pkcs12} : ");
            }

            SHA256WithRSA          sha  = new SHA256WithRSA(pkcs12, password);
            XmldsigForWidgetDigSig xmld = new XmldsigForWidgetDigSig(role, sha, root);

            var sig = xmld;

            string signedXml = Path.Combine(root, filename);

            File.WriteAllText(signedXml, sig.ToString().Replace("\r\n", "\n"));
        }
Esempio n. 11
0
        public void PrimaryHandler(WeChatPayOptions options, WeChatPayDictionary sortedTxtParams)
        {
            if (!string.IsNullOrEmpty(options.SubAppId))
            {
                sortedTxtParams.Add(WeChatPayConsts.appId, options.SubAppId);
            }
            else
            {
                sortedTxtParams.Add(WeChatPayConsts.appId, options.AppId);
            }

            sortedTxtParams.Add(WeChatPayConsts.timeStamp, WeChatPayUtility.GetTimeStamp());
            sortedTxtParams.Add(WeChatPayConsts.nonceStr, WeChatPayUtility.GenerateNonceStr());
            sortedTxtParams.Add(WeChatPayConsts.signType, WeChatPayConsts.RSA);

            var signatureSourceData = BuildSignatureSourceData(sortedTxtParams);

            sortedTxtParams.Add(WeChatPayConsts.paySign, SHA256WithRSA.Sign(options.CertificateRSAPrivateKey, signatureSourceData));
        }
        public static bool Validate(Dictionary <string, string> dictionary, X509Certificate rootCert, X509Certificate middleCert, string secureKey, bool ifValidateCNName)
        {
            if (dictionary == null)
            {
                return(false);
            }

            if (!dictionary.ContainsKey("signMethod") || !dictionary.ContainsKey("signature") || !dictionary.ContainsKey("version"))
            {
                return(false);
            }

            var signMethod = dictionary["signMethod"];
            var result     = false;

            if ("01" == signMethod)
            {
                var signValue = dictionary["signature"];
                dictionary.Remove("signature");

                var stringData       = GetSignContent(dictionary, true, false);
                var stringSignDigest = SHA256.Compute(stringData);
                var signPubKeyCert   = dictionary["signPubKeyCert"];

                var cert = VerifyAndGetPubKey(signPubKeyCert, rootCert, middleCert, ifValidateCNName);
                if (cert == null)
                {
                    return(false);
                }

                result = SHA256WithRSA.VerifyData(stringSignDigest, signValue, cert.GetPublicKey());
            }
            else if ("11" == signMethod || "12" == signMethod)
            {
                return(ValidateBySecureKey(dictionary, secureKey));
            }
            else
            {
                return(false);
            }

            return(result);
        }
Esempio n. 13
0
        private async Task CheckV3ResponseSignAsync(WeChatPayHeaders headers, string body, WeChatPayOptions options)
        {
            if (string.IsNullOrEmpty(headers.Serial))
            {
                throw new WeChatPayException($"sign check fail: {nameof(headers.Serial)} is empty!");
            }

            if (string.IsNullOrEmpty(headers.Signature))
            {
                throw new WeChatPayException($"sign check fail: {nameof(headers.Signature)} is empty!");
            }

            var cert = await LoadPlatformCertificateAsync(headers.Serial, options);

            var signatureSourceData = BuildSignatureSourceData(headers.Timestamp, headers.Nonce, body);

            if (!SHA256WithRSA.Verify(cert.GetRSAPublicKey(), signatureSourceData, headers.Signature))
            {
                throw new WeChatPayException("sign check fail: check Sign and Data Fail!");
            }
        }
Esempio n. 14
0
        /// <summary>
        /// 获取证书函数
        /// </summary>
        /// <param name="serial_no"></param>
        /// <returns></returns>
        public static string Get(string serial_no)
        {
            string server = "https://api.mch.weixin.qq.com";
            string path   = "/v3/certificates";
            string url    = server + path;

            string NonceStr  = Guid.NewGuid().ToString().Replace("-", "");
            string TimeStamp = Helper.GenerateTimeStamp();

            string signContent = "GET\n"
                                 + path + "\n"
                                 + TimeStamp + "\n"
                                 + NonceStr + "\n\n";


            string signature = SHA256WithRSA.RSA(signContent,
                                                 Config.CertPath, Config.MchId);

            string Authorization = "WECHATPAY2-SHA256-RSA2048 " +
                                   "mchid=\"" + Config.MchId + "\"," +
                                   "nonce_str=\"" + NonceStr + "\"," +
                                   "signature=\"" + signature + "\"," +
                                   "timestamp=\"" + TimeStamp + "\"," +
                                   "serial_no=\"" + serial_no + "\"";


            System.Net.WebHeaderCollection Headers = new System.Net.WebHeaderCollection
            {
                { "Authorization", Authorization }
            };
            Authorization = HttpService.Get(url, true, 10, "application/json", Headers);

            return(Authorization);

            //下载成功的证书
            //string file = "certificates.json";
            //System.IO.File.WriteAllText(file, Authorization);
        }
Esempio n. 15
0
        public string Get2(string DeviceID, string card)
        {
            DeviceID = DeviceID.ToLower();
            card     = card.ToLower();
            if (string.IsNullOrEmpty(card) || string.IsNullOrEmpty(DeviceID))
            {
                return("请求参数存在空值" + "card" + card + "deviceid" + DeviceID);
            }
            else
            {
                var reqSeq = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalMilliseconds);
                //参数信息
                Dictionary <string, string> messageDic = new Dictionary <string, string>();
                messageDic.Add("reqSeq", reqSeq.ToString());
                messageDic.Add("reqTime", DateTime.Now.ToString("yyyymmddhhmmss"));
                messageDic.Add("fjcsn", card.ToUpper());
                messageDic.Add("cardNo", "");
                string messageDataJson = JsonConvert.SerializeObject(messageDic);
                //公共请求体参数
                Dictionary <string, string> openDic = new Dictionary <string, string>();
                openDic.Add("appId", "PRECARD_807850581711240");
                openDic.Add("method", "getIDCardTerminal");
                openDic.Add("reqSeq", reqSeq.ToString());

                openDic.Add("bizContent", messageDataJson);
                openDic.Add("sign_param", "appId,method,bizContent");
                //排序
                var content = SHA256WithRSA.getSignContent(openDic);
                //加签
                openDic.Add("sign", SHA256WithRSA.Signature(content, this.private_key));
                string messageJson = JsonConvert.SerializeObject(openDic);
                //请求响应
                var data = ToHttp <IDCardTerminal> .ToPost2("https://ypay.96225.com/openapi", messageJson);

                if (!data.success)
                {
                    return(data.respCode + ":" + data.respDesc);
                }
                var idcard = JsonConvert.DeserializeObject <IDCardValue>(data.value);

                //返回参数体
                Dictionary <string, string> check = new Dictionary <string, string>();
                check.Add("reqSeq", reqSeq.ToString());
                check.Add("sign_param", "success,value");
                //bool类型转为小写
                check.Add("success", data.success.ToString().ToLower());
                check.Add("value", data.value);
                check.Add("sign", data.sign);
                //加签字符串
                var content2 = SHA256WithRSA.getSignContent(check);
                //var sign = SHA256WithRSA.Signature(content2, this.public_key);
                //验签
                var result = SHA256WithRSA.rsaCheck(content2, public_key, data.sign);
                if (!result)
                {
                    return("验签失败");
                }
                else
                {
                    //根据设备获取厢房
                    var room = dBtlljfl.GrabageRoom.FirstOrDefault(x => x.Facilityuuid == DeviceID);
                    if (room == null)
                    {
                        return("请先将设备绑定厢房");
                    }
                    var user = dBtlljfl.SystemUser.FirstOrDefault(x => x.IDCardMD5 == idcard.idcard);
                    if (user == null)
                    {
                        return("此用户未绑定市民卡号");
                    }
                    if (user.HomeAddressUUID == null)
                    {
                        return("此用户未绑定家庭码");
                    }
                    var time = DateTime.Now.ToString("yyyy-MM-dd");
                    //当天赋分次数
                    var disposal = dBtlljfl.GrabageDisposal.Count(x => x.HomeAddressUUID == user.HomeAddressUUID && x.ScoreAddtime.Substring(0, 10) == time && x.IsScore == "1");
                    //获取设置的评分次数
                    var      num       = dBtlljfl.Overallsituation.First();
                    TimeSpan nowDt     = DateTime.Now.TimeOfDay;
                    TimeSpan AmstartDt = DateTime.Parse("7:00").TimeOfDay;
                    TimeSpan AmendDt   = DateTime.Parse("9:00").TimeOfDay;
                    TimeSpan PmstartDt = DateTime.Parse("18:00").TimeOfDay;
                    TimeSpan PmendDt   = DateTime.Parse("20:00").TimeOfDay;
                    int      datediff  = 10;
                    var      disposals = dBtlljfl.GrabageDisposal.Where(x => x.HomeAddressUUID == user.HomeAddressUUID && x.IsScore == "0");
                    if (disposals.Count() > 0)
                    {
                        var      disposalss = disposals.OrderByDescending(x => x.ID).First();
                        TimeSpan a          = (DateTime.Now - DateTime.Parse(disposalss.AddTime));
                        datediff = a.Seconds;
                    }
                    if (disposal >= num.SetNumber)
                    {
                        return("今日该家庭赋分超过" + num.SetNumber + "次");
                    }
                    else if (datediff < 10)
                    {
                        return("间隔10秒后再赋分");
                    }
                    else if ((nowDt > AmstartDt && nowDt < AmendDt) || (nowDt > PmstartDt && nowDt < PmendDt))
                    {
                        //之前赋分记录
                        //var all = from g in _dbContext.GrabageDisposal
                        //          join sc in _dbContext.ScoreSetting
                        //          on g.ScoreSettingUuid equals sc.ScoreUuid
                        //          where g.HomeAddressUuid == huuid
                        //          select new
                        //          {
                        //              sc.Integral
                        //          };
                        //之前赋分分数之和
                        //var sum = all.Sum(x => x.Integral.Value);
                        //获取设置的评分分数
                        //var scoreSetting = _dbContext.ScoreSetting.First(x => x.ScoreName == "好");
                        var scoreSetting = dBtlljfl.ScoreSetting.First();
                        //添加赋分记录
                        GrabageDisposal gd = new GrabageDisposal();
                        gd.AddTime             = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                        gd.IsDelete            = "0";
                        gd.GarbageDisposalUUID = Guid.NewGuid();
                        gd.GrabageRoomID       = room.GarbageRoomUUID;
                        gd.ScoreSettingUUid    = scoreSetting.ScoreUUID;
                        gd.HomeAddressUUID     = user.HomeAddressUUID;
                        gd.SystemUserUUID      = user.SystemUserUUID;
                        gd.IsScore             = "0";
                        gd.MarkType            = "市民卡";
                        dBtlljfl.GrabageDisposal.Add(gd);

                        dBtlljfl.SaveChanges();
                    }
                    else
                    {
                        return("未在投放时间投放");
                    }
                    return("投放成功");
                }
            }
        }