2015-05-21 57 views
0

我正在尝试从Web服务读取文件。该文件被加密,并且解密函数期望输入(密文)作为基本64编码的字符串。下面的代码执行,但我无法解密结果字符串。使用HttpWebResponse读取文件数据

var request = (HttpWebRequest) WebRequest.Create(new Uri(_targetUrl)); 

request.Method = "GET"; 
request.ContentType = "text/plain"; 
request.ContentLength = 0; 
request.UseDefaultCredentials = true; 
request.Headers.Add("Ent-APRF:FileIdentifier"); 

var cfsResponse = (HttpWebResponse) request.GetResponse(); 

using (var rawResponseStream = cfsResponse.GetResponseStream()) 
{ 
if (rawResponseStream != null) 
    using (var content = new StreamReader(rawResponseStream, Encoding.GetEncoding(1252))) 
    { 
     using (var ms = new MemoryStream()) 
     { 
      content.BaseStream.CopyTo(ms); 
      var myBytes = ms.ToArray(); 

      var encrypteddata = Convert.ToBase64String(myBytes); 

      // call decrypt function suppling encrypted string 
     }   
    } 
} 

在该公司提供的Web服务的支持人员也给我发电子邮件相同的文件,我可以成功读取文件和解密,使用下面的代码。

using (StreamReader myFile = new StreamReader(@"C:\Encrypted_TEST", Encoding.GetEncoding(1252))) 
{ 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     myFile.BaseStream.CopyTo(ms); 
     var myBytes = ms.ToArray(); 

     var encrypteddata = Convert.ToBase64String(myBytes); 

     // call decrypt function suppling encrypted string 
    } 
} 

我想知道如果编码可能是问题,因为当我打开通过电子邮件在记事本++编码默认为ANSI发送的文件。但是,如果我将Web调用的响应字节写入文件并使用Notepad ++打开,则编码默认为带有BOM的UTF-8。

我还包括经由的Fiddler捕获完整性请求和响应..

请求

GET https://url HTTP/1.1 
Ent-APRF: FileIdentifier 
Host: hostName 
Connection: Keep-Alive

响应

HTTP/1.1 200 OK 
Date: Wed, 20 May 2015 23:51:17 GMT 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Content-Length: 5767 
Set-Cookie: ssnid=1b7eea90ff4b11e48bb9dd1cd2992cd2; path=/; HttpOnly 
Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 

0�w *�H�� 
��h0�d1��0���0/0'1 
0 UUS10U 
...additional content body not included...

任何帮助或建议将不胜感激。

+0

其中显示了您成功解密的代码?..还显示解密不成功的输出在哪里? – tharif

+0

第二个代码块显示读取电子邮件文件并导致成功解密。解密函数在一个单独的C DLL中,所以我在其中包含注释“//调用解密函数提供加密的字符串”是函数被调用的地方。当对该函数的调用不成功时,将返回一个空字符串。 – Mike

+0

实际上我在问输出在哪里显示? – tharif

回答

0

提供服务的公司对文件生成和编码进行了调整。我现在可以使用原始代码获取和解密。

var request = (HttpWebRequest) WebRequest.Create(new Uri(_targetUrl)); 

request.Method = "GET"; 
request.ContentType = "text/plain"; 
request.ContentLength = 0; 
request.UseDefaultCredentials = true; 
request.Headers.Add("Ent-APRF:FileIdentifier"); 

var cfsResponse = (HttpWebResponse) request.GetResponse(); 

using (var rawResponseStream = cfsResponse.GetResponseStream()) 
{ 
    if (rawResponseStream != null) 
    using (var content = new StreamReader(rawResponseStream, Encoding.GetEncoding(1252))) 
    { 
     using (var ms = new MemoryStream()) 
     { 
      content.BaseStream.CopyTo(ms); 
      var myBytes = ms.ToArray(); 

      var encrypteddata = Convert.ToBase64String(myBytes); 

      // call decrypt function suppling encrypted string 
     }   
    } 
}