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...
任何帮助或建议将不胜感激。
其中显示了您成功解密的代码?..还显示解密不成功的输出在哪里? – tharif
第二个代码块显示读取电子邮件文件并导致成功解密。解密函数在一个单独的C DLL中,所以我在其中包含注释“//调用解密函数提供加密的字符串”是函数被调用的地方。当对该函数的调用不成功时,将返回一个空字符串。 – Mike
实际上我在问输出在哪里显示? – tharif