Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
    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;
    }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 public static string EncryptAES(this string str)
 {
     return(AESUtil.Encrypt(str));
 }
Exemplo n.º 7
0
        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));
            }
        }