private static EncryptParseItem ParseEncryptItem(string body, string rootNode, int indexOfRootNode)
        {
            int signDataStartIndex = indexOfRootNode + rootNode.Length + 2;
            int indexOfSign        = body.IndexOf("\"" + AlipayConstants.SIGN + "\"");

            int signDataEndIndex = indexOfSign - 1;

            if (signDataEndIndex < 0)
            {
                signDataEndIndex = body.Length - 1;
            }

            int length = signDataEndIndex - signDataStartIndex;

            string encyptContent = body.Substring(signDataStartIndex + 1, length - 2);

            EncryptParseItem item = new EncryptParseItem();

            item.encryptContent = encyptContent;
            item.startIndex     = signDataStartIndex;
            item.endIndex       = signDataEndIndex;


            return(item);
        }
예제 #2
0
        private static EncryptParseItem ParseEncryptItem(string body, string rootNode, int indexOfRootNode)
        {
            //  第一个字母+长度+>
            int signDataStartIndex = indexOfRootNode + rootNode.Length + 1;

            string xmlStartNode       = "<" + AlipayConstants.ENCRYPT_NODE_NAME + ">";
            string xmlEndNode         = "</" + AlipayConstants.ENCRYPT_NODE_NAME + ">";
            int    indexOfEncryptNode = body.IndexOf(xmlEndNode);

            if (indexOfEncryptNode < 0)
            {
                EncryptParseItem item = new EncryptParseItem();
                item.encryptContent = null;
                item.startIndex     = 0;
                item.endIndex       = 0;

                return(item);
            }

            int startIndex = signDataStartIndex + xmlStartNode.Length;
            int bizLen     = indexOfEncryptNode - startIndex;

            string encryptBizContent = body.Substring(startIndex, bizLen);

            EncryptParseItem item2 = new EncryptParseItem();

            item2.encryptContent = encryptBizContent;
            item2.startIndex     = signDataStartIndex;
            item2.endIndex       = indexOfEncryptNode + xmlEndNode.Length;

            return(item2);
        }
예제 #3
0
        public string EncryptSourceData(IAopRequest <T> request, string body, string encryptType, string encryptKey, string charset)
        {
            EncryptParseItem item = ParseEncryptData(request, body);

            string bodyIndexContent = body.Substring(0, item.startIndex);
            string bodyEndContent   = body.Substring(item.endIndex);
            string encryptContent   = AlipayEncrypt.AesDencrypt(encryptKey, item.encryptContent, charset);

            return(bodyIndexContent + encryptContent + bodyEndContent);
        }
        public string EncryptSourceData(IAopRequest <T> request, string body, string encryptType, string encryptKey, string charset)
        {
            if (!"AES".Equals(encryptType))
            {
                throw new AopException("API only support AES!");
            }

            EncryptParseItem item = parseEncryptData(request, body);

            string bodyIndexContent = body.Substring(0, item.startIndex);
            string bodyEndexContent = body.Substring(item.endIndex);

            //TODO 解密逻辑
            string bizContent = AlipayEncrypt.AesDencrypt(encryptKey, item.encryptContent, charset);

            return(bodyIndexContent + bizContent + bodyEndexContent);
        }
        /// <summary>
        /// 解析加密节点
        /// </summary>
        /// <param name="request"></param>
        /// <param name="body"></param>
        /// <returns></returns>
        private static EncryptParseItem parseEncryptData(IAopRequest <T> request, string body)
        {
            string rootNode      = request.GetApiName().Replace(".", "_") + AlipayConstants.RESPONSE_SUFFIX;
            string errorRootNode = AlipayConstants.ERROR_RESPONSE;

            int indexOfRootNode  = body.IndexOf(rootNode);
            int indexOfErrorRoot = body.IndexOf(errorRootNode);

            EncryptParseItem result = null;

            if (indexOfRootNode > 0)
            {
                result = ParseEncryptItem(body, rootNode, indexOfRootNode);
            }
            else if (indexOfErrorRoot > 0)
            {
                result = ParseEncryptItem(body, errorRootNode, indexOfErrorRoot);
            }

            return(result);
        }