Exemple #1
0
        static void Main(string[] args)
        {
            string plainText      = "hello";
            var    ciphertext     = SecurityHelper.AESEncrypt(plainText);
            var    descryptedText = SecurityHelper.AESDecrypt(ciphertext);

            Console.WriteLine($"原始明文:{plainText}");
            Console.WriteLine($"加密后文本:{ciphertext}");
            Console.WriteLine($"解密后文本:{descryptedText}");
            Console.ReadLine();
        }
Exemple #2
0
        public ApiResult Login(string phoneNumber, int code)
        {
            var codeCache = _cache.Get <int>("LoginCode" + phoneNumber);

            if (code <= 0 || codeCache <= 0 || codeCache != code)
            {
                throw new Exception("验证码错误");
            }

            Token token = new Token()
            {
                CreateTime = DateTime.Now,
                Phone      = phoneNumber
            };

            string tokenText =
                SecurityHelper.AESEncrypt(JsonConvert.SerializeObject(token), LocalConfig.Instance.AesKey);

            return(new ApiResult()
            {
                Message = tokenText
            });
        }
Exemple #3
0
        /// <summary>
        /// 1:将Post方法中Body中的数据进行AES解密
        /// 2:将返回数据进行AES加密
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task Invoke(HttpContext context)
        {
            context.Request.EnableBuffering();
            _stopwatch = new Stopwatch();
            _stopwatch.Start();
            _logger.LogInformation($"Handling request: " + context.Request.Path);
            var api = new ApiRequestInputViewModel
            {
                HttpType    = context.Request.Method,
                Query       = context.Request.QueryString.Value,
                RequestUrl  = context.Request.Path,
                RequestName = "",
                RequestIP   = context.Request.Host.Value
            };

            var request  = context.Request.Body;
            var response = context.Response.Body;

            try
            {
                using (var newRequest = new MemoryStream())
                {
                    //替换request流
                    context.Request.Body = newRequest;

                    using (var newResponse = new MemoryStream())
                    {
                        //替换response流
                        context.Response.Body = newResponse;

                        using (var reader = new StreamReader(request))
                        {
                            //读取原始请求流的内容
                            api.Body = await reader.ReadToEndAsync();

                            if (string.IsNullOrEmpty(api.Body))
                            {
                                await _next.Invoke(context);
                            }
                            //示例加密字符串,使用 AES-ECB-PKCS7 方式加密,密钥为:0123456789abcdef
                            // 加密参数:{"value":"哈哈哈"}
                            // 加密后数据: oedwSKGyfLX8ADtx2Z8k1Q7+pIoAkdqllaOngP4TvQ4=
                            api.Body = SecurityHelper.AESDecrypt(api.Body, securitykey);
                        }
                        using (var writer = new StreamWriter(newRequest))
                        {
                            await writer.WriteAsync(api.Body);

                            await writer.FlushAsync();

                            newRequest.Position  = 0;
                            context.Request.Body = newRequest;
                            await _next(context);
                        }

                        using (var reader = new StreamReader(newResponse))
                        {
                            newResponse.Position = 0;
                            api.ResponseBody     = await reader.ReadToEndAsync();

                            if (!string.IsNullOrWhiteSpace(api.ResponseBody))
                            {
                                api.ResponseBody = SecurityHelper.AESEncrypt(api.ResponseBody, securitykey);
                            }
                        }
                        using (var writer = new StreamWriter(response))
                        {
                            await writer.WriteAsync(api.ResponseBody);

                            await writer.FlushAsync();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.LogError($" http中间件发生错误: " + ex.ToString());
            }
            finally
            {
                context.Request.Body  = request;
                context.Response.Body = response;
            }

            // 响应完成时存入缓存
            context.Response.OnCompleted(() =>
            {
                _stopwatch.Stop();
                api.ElapsedTime = _stopwatch.ElapsedMilliseconds;

                _logger.LogDebug($"RequestLog:{DateTime.Now.ToString("yyyyMMddHHmmssfff") + (new Random()).Next(0, 10000)}-{api.ElapsedTime}ms", $"{JsonConvert.SerializeObject(api)}");
                return(Task.CompletedTask);
            });

            _logger.LogInformation($"Finished handling request.{_stopwatch.ElapsedMilliseconds}ms");
        }