public Client()
            {
                RsaHelper rsa = new RsaHelper();

                PublicKey = rsa.PublicKey;
                _cryptor  = new TransmissionEncryptor(rsa.PrivateKey, ServerPublicKey);
            }
Пример #2
0
        /// <summary>
        /// 将收到的客户端请求进行解密
        /// </summary>
        /// <param name="request">加密的请求</param>
        /// <returns>解密后的请求</returns>
        public async Task <HttpRequest> DecryptRequest(HttpRequest request)
        {
            if (_privateKey == null || request.Method == HttpMethod.Get.Method || request.Body == null)
            {
                return(request);
            }

            string publicKey = request.Headers.GetOrDefault(HttpHeaderNames.ClientPublicKey);

            if (publicKey != null)
            {
                //throw new OsharpException("在请求头中客户端公钥信息无法找到");
                _encryptor = new TransmissionEncryptor(_privateKey, publicKey);
            }

            if (_encryptor == null)
            {
                return(request);
            }

            try
            {
                string data = await request.ReadAsStringAsync();

                if (string.IsNullOrEmpty(data))
                {
                    return(request);
                }

                data = _encryptor.DecryptAndVerifyData(data);
                if (data == null)
                {
                    throw new OsharpException("服务器解析请求数据时发生异常");
                }

                await request.WriteBodyAsync(data);

                return(request);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex is CryptographicException ? "服务器解析传输数据时发生异常。" : "服务器对请求数据进行解密处理时发生异常。", ex);
                throw new OsharpException("服务器对请求数据进行解密处理时发生异常。", ex);
            }
        }
 public Server(string clientPublicKey)
 {
     _cryptor = new TransmissionEncryptor(ServerPrivateKey, clientPublicKey);
 }