是否可以在不写入文件系统的情况下进行md5检查
本文关键字:情况下 检查 md5 文件系统 是否 | 更新日期: 2023-09-27 18:22:02
基本上我在做以下事情:
- 从网站下载加密文件到MemoryStream
- 解密文件
- 将解密后的文件写入文件系统
- 将其作为FileStream再次读取回内存
- 计算MD5并进行检查
- 将文件发送到打印机
这是我的代码:
private async void DownloadFileToBePrinted()
{
using (WebClient client = new WebClient())
{
var data = await client.DownloadDataTaskAsync(new Uri(Url));
using (var ms = new MemoryStream(data))
{
valid = DecodeFile(ms);
}
}
}
private bool DecodeFile(MemoryStream stream)
{
bool valid = true;
try
{
using (StreamReader reader = new StreamReader(stream))
{
stream.Position = 0;
var str = reader.ReadToEnd();
File.WriteAllBytes(FILE_TO_BE_PRINTED, this.Decode(str));
using (var md5 = MD5.Create())
{
using (var fs = File.OpenRead(FILE_TO_BE_PRINTED))
{
var hash = md5.ComputeHash(fs);
if (ByteToHex(hash) != FileDetails.MD5) // check against stored md5
valid = false;
}
}
}
}
catch(Exception ex)
{
valid = false;
}
return (valid);
}
这似乎有点低效,除了要求在可以避免的情况下不要将文件写入文件系统之外。
所以我想知道是否可以在不将文件写入文件系统的情况下做到这一点?如果是,怎么办?
您可以在没有FileStream的情况下计算MD5,如下所示:
byte[] decoded = this.Decode(str);
var md5 = MD5.Create();
md5.ComputeHash(decoded);