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. "); } }
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. "); } }
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), });
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)); } }
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)); } }
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)); } }
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)); } }
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(); }
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")); }
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); }
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!"); } }
/// <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); }
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("投放成功"); } } }