public void genEncryptData(string data, string cerPath, string pfxPath, string password, out string encryptData, out string sign, out string encryptKey) { encryptData = ""; encryptKey = ""; sign = ""; try { // 加载公私钥 X509Certificate2 publicKeyInfo = DataCertificate.GetCertFromCerFile(cerPath); X509Certificate2 privateKeyInfo = DataCertificate.GetCertificateFromPfxFile(pfxPath, password); string platPublicKey = publicKeyInfo.PublicKey.Key.ToXmlString(false); string merchantPublicKey = privateKeyInfo.PublicKey.Key.ToXmlString(false); // 公钥 string merchantPrivateKey = privateKeyInfo.PrivateKey.ToXmlString(true); // 私钥 //byte[] plainBytes = Encoding.UTF8.GetBytes(data); //生成AESKEY string aesKey = ComUtils.CreateRandomString(16); //报文加密 encryptData = Base64.EncodeBase64(Encoding.UTF8, AESUtil.Encrypt(data, aesKey)); //生成签名 sign = Base64.EncodeBase64(Encoding.UTF8, RSAUtil.RSAEncrypt(merchantPrivateKey, data)); //AESKEY加密 encryptKey = Base64.EncodeBase64(Encoding.UTF8, AESUtil.Encrypt(data, platPublicKey)); } catch (Exception e) { log.Write(e, MsgType.Error); } }
/// <summary> /// 生成加密的 Url /// </summary> /// <param name="url"></param> /// <param name="userId"></param> /// <param name="userName"></param> /// <returns></returns> public static string EncryptUrl(string url, string userId, string userName) { if (string.IsNullOrEmpty(url) || string.IsNullOrEmpty(userId)) { throw new ArgumentNullException("参数 url、userId 不能为空"); } var query = HttpUtility.ParseQueryString(string.Empty); query.Add("UserId", userId); query.Add("UserName", userName); query.Add("MTime", DateTime.Now.ToString("yyyyMMddHHmmss")); string data = AESUtil.Encrypt(query.ToString(), AES_KEY); string sign = GenerateSign(query.ToString()); if (url.Contains("?")) { url = url.TrimEnd('&') + "&"; } else { url = url.TrimEnd('?') + "?"; } string cipherUrl = string.Format(url + "data={0}&sign={1}&r={2}", HttpUtility.UrlEncode(data), HttpUtility.UrlEncode(sign), DateTime.Now.ToFileTime()); return(cipherUrl); }
void Encry() { Stopwatch sw = new Stopwatch(); sw.Start(); var text = AESUtil.Encrypt(toEncry, AESKey.DefaultKey, AESKey.DefaultIV); sw.Stop(); Debug.Log(sw.ElapsedMilliseconds); Debug.Log(text); toDecry = text; }
/// <summary> /// 获取查询字符串明文 /// </summary> /// <param name="uri"></param> /// <returns></returns> public static NameValueCollection GetUserQueryString(Uri uri) { if (uri == null || string.IsNullOrEmpty(uri.Query)) { return(null); } var values = HttpUtility.ParseQueryString(uri.Query); string data = values["data"]; string sign = values["sign"]; if (string.IsNullOrEmpty(data) || string.IsNullOrEmpty(sign)) { return(null); } string qs = AESUtil.Encrypt(data, AES_KEY); if (string.IsNullOrEmpty(qs)) { return(null); } if (VerifySign(qs, sign)) { var query = HttpUtility.ParseQueryString(qs); DateTime time = DateTime.ParseExact(query["MTime"], "yyyyMMddHHmmss", null); if (DateTime.Now.Subtract(time) > MAX_LIFE_TIME) { //Logger.Error("上传文件地址,已超过 30 分钟", new Exception(uri.ToString())); return(null); } return(query); } else { //Logger.Error("上传文件地址,验证签名失败", new Exception(uri.ToString())); } return(null); }
protected void Button1_Click(object sender, EventArgs e) { //商户账户编号 string customernumber = "1080"; string hmacKey = "b9fc4b3d1c4a4e3b9fdc94cc4faa6e9a"; string AesKey = "1234567890123456"; //日志字符串 StringBuilder logsb = new StringBuilder(); logsb.Append(DateTime.Now.ToString() + "\n"); Random ra = new Random(); string payproducttype = "SALES"; // "支付方式"; string amount = (orderAmount.Text); //支付金额为,单位元 string requestid = traderOrderID.Text; //订单号 string productcat = productCatalog.Text; //商品类别码,商户支持的商品类别码由易宝支付运营人员根据商务协议配置 string productdesc = productDesc.Text; //商品描述 string productname = productName.Text; //商品名称 string assure = "0"; //是否需要担保,1是,0否 string divideinfo = ""; //分账信息,格式”ledgerNo:分账比 string bankid = bankId.Text; //银行编码 string period = ""; //担保有效期,单位 :天;当assure=1 时必填,最大值:30 string memo = ""; //商户备注 //商户提供的商户后台系统异步支付回调地址 string callbackurl = callbackURL.Text; //商户提供的商户前台系统异步支付回调地址 string webcallbackurl = fcallbackURL.Text; string hmac = ""; hmac = Digest.GetHMAC(customernumber, requestid, amount, assure, productname, productcat, productdesc, divideinfo, callbackurl, webcallbackurl, bankid, period, memo, hmacKey); SortedDictionary <string, object> sd = new SortedDictionary <string, object>(); sd.Add("customernumber", customernumber); sd.Add("amount", amount); sd.Add("requestid", requestid); sd.Add("assure", assure); sd.Add("productname", productname); sd.Add("productcat", productcat); sd.Add("productdesc", productdesc); sd.Add("divideinfo", divideinfo); sd.Add("callbackurl", callbackurl); sd.Add("webcallbackurl", webcallbackurl); sd.Add("bankid", bankid); sd.Add("period", period); sd.Add("memo", memo); sd.Add("payproducttype", payproducttype); sd.Add("hmac", hmac); //将网页支付对象转换为json字符串 string wpinfo_json = Newtonsoft.Json.JsonConvert.SerializeObject(sd); logsb.Append("网银支付明文数据json格式为:" + wpinfo_json + "\n"); string datastring = AESUtil.Encrypt(wpinfo_json, AesKey); logsb.Append("网银支付业务数据经过AES加密后的值为:" + datastring + "\n"); //打开浏览器访问一键支付网页支付链接地址,请求方式为get string postParams = "data=" + HttpUtility.UrlEncode(datastring) + "&customernumber=" + customernumber; string url = "/yeepayNewApi.aspx?" + postParams; Response.Redirect(url); }
public static string EncryptAES(this string str) { return(AESUtil.Encrypt(str)); }
public ActionResult YeePay(string orderNo) { //var order = OrderContract.OrderInfos.Where(p => p.OrderNo == orderNo).SingleOrDefault(); //if (order == null) return Content("订单不存在"); string serverHost = ConfigurationManager.AppSettings["ServerHost"]; //一键支付URL前缀 string apiprefix = APIURLConfig.mobilePrefix; //网页支付地址 string mobilepayURI = APIURLConfig.webpayURI; //商户账户编号 string customernumber = YeePayConfig.merchantAccount; string hmacKey = YeePayConfig.merchantKey; string AesKey = YeePayConfig.AescKey; //日志字符串 StringBuilder logsb = new StringBuilder(); logsb.Append(DateTime.Now.ToString() + "\n"); Random ra = new Random(); string payproducttype = "ONEKEY"; // "支付方式"; string amount = /*order.TotalPrice + */ ""; //支付金额为单位元 string requestid = orderNo; //订单号 string productcat = ""; //商品类别码,商户支持的商品类别码由易宝支付运营人员根据商务协议配置 string productdesc = "订单商品"; //商品描述 string productname = "订单商品"; //商品名称 string assure = "0"; //是否需要担保,1是,0否 string divideinfo = ""; //分账信息,格式”ledgerNo:分账比 string bankid = ""; //银行编码 string period = ""; //担保有效期,单位 :天;当assure=1 时必填,最大值:30 string memo = ""; //商户备注 string userno = /*order.UserInfo.Id +*/ ""; //用户标识 string ip = ""; //IP string cardname = ""; //持卡人姓名 string idcard = ""; //身份证 string bankcardnum = ""; //银行卡号 //商户提供的商户后台系统异步支付回调地址 string callbackurl = string.Format("{0}Admin/Pay/YeePayNotifyUrl", serverHost); //商户提供的商户前台系统异步支付回调地址 string webcallbackurl = ""; string hmac = ""; hmac = Digest.GetHMAC(customernumber, requestid, amount, assure, productname, productcat, productdesc, divideinfo, callbackurl, webcallbackurl, bankid, period, memo, hmacKey); SortedDictionary <string, object> sd = new SortedDictionary <string, object>(); sd.Add("customernumber", customernumber); sd.Add("amount", amount); sd.Add("requestid", requestid); sd.Add("assure", assure); sd.Add("productname", productname); sd.Add("productcat", productcat); sd.Add("productdesc", productdesc); sd.Add("divideinfo", divideinfo); sd.Add("callbackurl", callbackurl); sd.Add("webcallbackurl", webcallbackurl); sd.Add("bankid", bankid); sd.Add("period", period); sd.Add("memo", memo); sd.Add("payproducttype", payproducttype); sd.Add("userno", userno); sd.Add("ip", ip); sd.Add("cardname", cardname); sd.Add("idcard", idcard); sd.Add("bankcardnum", bankcardnum); sd.Add("hmac", hmac); //将网页支付对象转换为json字符串 string wpinfo_json = Newtonsoft.Json.JsonConvert.SerializeObject(sd); logsb.Append("手机支付明文数据json格式为:" + wpinfo_json + "\n"); string datastring = AESUtil.Encrypt(wpinfo_json, AesKey); logsb.Append("手机支付业务数据经过AES加密后的值为:" + datastring + "\n"); //打开浏览器访问一键支付网页支付链接地址,请求方式为get string postParams = "data=" + HttpUtility.UrlEncode(datastring) + "&customernumber=" + customernumber; string url = apiprefix + mobilepayURI + "?" + postParams; logsb.Append("手机支付链接地址为:" + url + "\n"); string ybResult = YJPayUtil.payAPIRequest(apiprefix + mobilepayURI, datastring, false); logsb.Append("请求支付结果:" + ybResult + "\n"); //将支付结果json字符串反序列化为对象 RespondJson respJson = Newtonsoft.Json.JsonConvert.DeserializeObject <RespondJson>(ybResult); string yb_data = respJson.data; yb_data = AESUtil.Decrypt(yb_data, YeePayConfig.merchantKey); PayRequestJson result = Newtonsoft.Json.JsonConvert.DeserializeObject <PayRequestJson>(yb_data); if (result.code == 1) { bool r = Digest.PayRequestVerifyHMAC(result.customernumber, result.requestid, result.code, result.externalid, result.amount, result.payurl, hmacKey, result.hmac); if (r) { //重定向跳转到易宝支付收银台 return(Redirect(result.payurl)); } else { return(Content("回调验签失败")); } } else { return(Content(result.msg)); } }