예제 #1
0
        public void Test3DESKeyEncrypt()
        {
            string key          = EncDecUtil.GetEncryptKey("654321");
            string encryptedKey = EncDecUtil.Base64Encrypt(EncDecUtil.RSAEncrypt("D:/cer/700000000000001.pfx", "000000", key));

            Assert.IsTrue(encryptedKey != null);
        }
예제 #2
0
        public void TestEncrypt()
        {
            string s1 = EncDecUtil.GetEncryptKey("654321");
            string rightEncryptedS1 = "HyWvyTPmlX2M/XJruMxKMIldV42XG2eCoV5o8Gi6CgifcIlKky3a8+tVnof8pnz34+HvKt9tk2C0wa2LEy9Vz0cXiBn2DTh/G8hka9QKdyjER+YtZYRqfU/qpJnw+xvcWvPo9HZXykWAYHuCPjnbPoKLex6xh6Xh0g2ES10Gxhc=";
            var    encryptedS1      = EncDecUtil.Base64Encrypt(EncDecUtil.RSAEncrypt("D:/cer/630056832596.pfx", "123456", s1));

            Assert.IsTrue(encryptedS1 != null);
            Assert.IsTrue(encryptedS1 == rightEncryptedS1);
        }
예제 #3
0
        public void TestTripleDesEncrypt()
        {
            string s1  = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><upbp application=\"MGw.Req\" version =\"1.0.0\" sendTime =\"20131223155031\" sendSeqId =\"12345888888000\"><frontUrl>http://www.163.com</frontUrl><merchantOrderDesc></merchantOrderDesc><misc></misc><gwType>01</gwType><transTimeout>ssssss</transTimeout><backUrl>http://192.168.1.156:8080/Test/Notify</backUrl><merchantOrderCurrency>156</merchantOrderCurrency><merchantOrderAmt>1</merchantOrderAmt><merchantOrderDesc>呵呵</merchantOrderDesc><merchantId>630056832596</merchantId><merchantOrderTime>20131223155031</merchantOrderTime><merchantOrderId>20131223155031</merchantOrderId><merchantUserId></merchantUserId><mobileNum>15388157741</mobileNum><cardNum></cardNum></upbp>";
            string key = EncDecUtil.GetEncryptKey("654321");
            string rightEncryptedS1 = "Dau3eXih4xg1yrTZhvQ9RCd/nMVK4dNRiTWXjAh9OT0uyUEroFMYrAmndlfsulEQsqjwZu3W7AVpqiDQdsOJmiKD83+xtm1Zks5CUhvzPirQH2yzyTVnycXWkGUzYE2NZzoo4BtTPWmK1BMtXc8Edm2VvT0LpghUYGji+D2B2cJKuNlFrBXb/VU2hOK3xF7VFnLYax79Vdtdnj9HUR4Jnk5i1bCLWzQT+l07WkLcpTkKY3ud7NrP/lqKXScLWoCXR9glH24OLIb8BHmNcwMKNEVbWgJHWmsxdJHG0BKhi7pOzKabx5LbqWl6UWGaun9Ll7NZYVTwYekA6yynWk5L+OCOFcM32pCzRY8cMM+nV0zakyyyKJ3MUS6sXMFXfXUOFnLYax79VdsKUt1osFs7Yf/yCpnfAOcMxfOxWmaThaGIZhkxOILqZMuBj6eduJF7tc+RUaOClbVPI/rtai13xrk5BjIjNam72WMD0Qsffu8bmf1lvDMuVoovUujpjGx13fesDllvf5X8BHmNcwMKNBD8j+EOIidzPqf0D8gxU1arGJzIkdTGxn9Z9BzE68q0TyP67Wotd8a+o9HAhfJAwGi5rLQTaH26/AR5jXMDCjRFW1oCR1prMbp6Y1t3I1YT/QGIquncWYxggdTCBg7jIT6n9A/IMVNWvc9EfUBtNPv8BHmNcwMKNCUwZThqh4f9tz8WDOJGDc/69FiKnWivNn1UwC4pOEzmWAwqYmShn73bDfvoTQ1Mcuwx1m51Qv6d7jaq9dMk1TTRr2q/xF+7oKmSrko/d9qp7DHWbnVC/p2PTW+ta0IdUKITi57cBHPbGm2hsCCCWGkocaY7ZvTsMkB5fUWRlHPjxYQQtmSCXpRp+d8eGu4LOixT8QQOUv3zDIggDEqf900a3FMkTQngKby0H5cpi1yZBK/VZOjeGKhpVm+NHIcoeg==";
            var    encryptedS1      = EncDecUtil.Base64Encrypt(EncDecUtil.TripleDESEncrypt(key, s1));

            Assert.IsTrue(encryptedS1 != null);
            Assert.IsTrue(encryptedS1 == rightEncryptedS1);
        }
예제 #4
0
        //static string API_URL = "http://58.246.136.11:8006/wapDetect/gateWay!gate.ac";

        #region 工具方法
        /// <summary>
        /// 调用API
        /// </summary>
        /// <typeparam name="TRequest">向支付接口发送的请求的类型</typeparam>
        /// <typeparam name="TResponse"></typeparam>
        /// <param name="pChannel"></param>
        /// <param name="pRequest"></param>
        /// <returns></returns>
        private static TResponse CallAPI <TRequest, TResponse>(UnionPayChannel pChannel, TRequest pRequest)
            where TRequest : BaseAPIRequest
            where TResponse : BaseAPIResponse, new()
        {
            //参数校验
            if (pChannel == null)
            {
                throw new ArgumentNullException("pChannel");
            }
            if (string.IsNullOrWhiteSpace(pChannel.MerchantID))
            {
                throw new ArgumentNullException("pChannel.MerchantID");
            }
            if (pRequest == null)
            {
                throw new ArgumentNullException("pRequest");
            }
            //
            var reqContent = pRequest.GetContent();
            var merchantID = EncDecUtil.Base64Encrypt(pChannel.MerchantID);       //Base64加密商户ID
            var desKey     = EncDecUtil.GetEncryptKey(pChannel.PacketEncryptKey); //获取实际加密密钥
            //采用Base64(RSA(加密密钥))计算出报文中的加密密钥
            var encryptedDesKey = EncDecUtil.Base64Encrypt(EncDecUtil.RSAEncrypt(pChannel.CertificateFilePath, pChannel.CertificateFilePassword, desKey + "11111111"));
            //采用Base64(3DES(报文))加密报文
            var encryptedContent = EncDecUtil.Base64Encrypt(EncDecUtil.TripleDESEncrypt(desKey, reqContent));
            //
            var requestContent = merchantID + "|" + encryptedDesKey + "|" + encryptedContent;

            using (WebClient wc = new WebClient())
            {
                string   strResponse      = wc.UploadString(IVRGateway.API_URL, requestContent);
                string[] responseSections = strResponse.Split('|');
                string   rspCode          = responseSections[0];
                string   rspContent       = responseSections[1];
                //
                if (rspCode == "1")
                {
                    var    decRspBytes   = EncDecUtil.TripleDESDecrypt(desKey, EncDecUtil.Base64Decrypt(rspContent));
                    string decRspContent = Encoding.UTF8.GetString(decRspBytes);
                    decRspContent = decRspContent.Replace("\0", string.Empty);
                    TResponse rsp = new TResponse();
                    rsp.Load(decRspContent);
                    //
                    return(rsp);
                }
                else
                {
                    string            errorCode = rspContent;
                    string            errorMsg  = Encoding.UTF8.GetString(EncDecUtil.Base64Decrypt(responseSections[2]));
                    UnionPayException ex        = new UnionPayException(errorMsg);
                    ex.Code = errorCode;
                    throw ex;
                }
            }
        }
예제 #5
0
        public static ReqResponse CallAPI <TRequest>(NegotiationPayChannel pChannel, TRequest pRequest)
            where TRequest : NeBaseAPIRequest
        {
            if (pRequest == null)
            {
                throw new ArgumentNullException("pRequest");
            }
            var    reqContent          = pRequest.GetContent();
            var    merchantID          = JIT.CPOS.BS.Web.ApplicationInterface.Negotiation.Util.EncDecUtil.Base64Encrypt(pChannel.MerchantID);
            string CertificateFilePath = HttpContext.Current.Server.MapPath("~/" + pChannel.CertificateFilePath);

            RSAGenerator rsa    = new RSAGenerator();
            string       key    = rsa.getPublicKey();
            var          desKey = EncDecUtil.GetEncryptKey(key); //获取实际加密密钥
            //采用Base64(RSA(加密密钥))计算出报文中的加密密钥
            var encryptedDesKey = EncDecUtil.Base64Encrypt(EncDecUtil.RSAEncrypt(CertificateFilePath, pChannel.CertificateFilePassword, desKey + "11111111"));
            //采用Base64(3DES(报文))加密报文
            var encryptedContent = EncDecUtil.Base64Encrypt(EncDecUtil.TripleDESEncrypt(desKey, reqContent));
            //使用md5生成摘要
            var md5            = EncDecUtil.CreateMD5Encod(reqContent);
            var requestContent = merchantID + "|" + encryptedDesKey + "|" + encryptedContent + "|" + md5;

            using (WebClient wc = new WebClient())
            {
                string   strResponse      = wc.UploadString(url, requestContent);
                string[] responseSections = strResponse.Split('|');
                string   rspCode          = responseSections[0];
                string   rspContent       = responseSections[1];
                if (rspCode == "1")
                {
                    var    decRspBytes   = EncDecUtil.TripleDESDecrypt(desKey, EncDecUtil.Base64Decrypt(rspContent));
                    string decRspContent = Encoding.UTF8.GetString(decRspBytes);
                    decRspContent = decRspContent.Replace("\0", string.Empty);
                    ReqResponse req = new ReqResponse();
                    req.ResultCode = rspCode;
                    req.Data       = decRspContent;
                    return(req);
                }
                else
                {
                    string            errorCode = rspContent;
                    string            errorMsg  = Encoding.UTF8.GetString(EncDecUtil.Base64Decrypt(responseSections[2]));
                    UnionPayException ex        = new UnionPayException(errorMsg);
                    ex.Code = errorCode;
                    Log.Loggers.Exception(new Log.ExceptionLogInfo(ex)
                    {
                        ErrorMessage = ex.ToString()
                    });
                    ReqResponse req = new ReqResponse();
                    req.ResultCode = errorCode;
                    req.Message    = errorMsg;
                    return(req);
                }
            }
        }