我想将字节数组附加到我打开的流中,但只是将其传递给哈希算法并计算哈希,如下所示:
byte[] data;
using (BufferedStream bs = new BufferedStream(File.OpenRead(path), 1200000))
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] hash = md5.ComputeHash(data + bs);
}
我不知道如何做"数据 + bs"或"bs + 数据"部分......对此有任何想法吗?
你为什么不简单地做这样的事情:
public static byte[] MD5Hash( byte[] salt, Stream s , int blockSize )
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider() ;
md5.Initialize();
md5.TransformBlock(salt,0,salt.Length,salt,0) ;
byte[] buf = new byte[blockSize];
int bufl ;
while ( (bufl=s.Read( buf , 0 , buf.Length )) > 0 )
{
md5.TransformBlock(buf,0,bufl,buf,0) ;
}
md5.TransformFinalBlock(buf,0,0) ;
return md5.Hash ;
}
这样做:
byte[] hash = md5.ComputeHash(data + ReadToEnd(bs));
而且,您的 ReadToEnd 函数:
public static byte[] ReadToEnd(Stream input)
{
byte[] buffer = new byte[16*1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}
// here is a quick approach to your original question:
List<byte> raw = new List<byte>(data);
raw.AddRange(File.ReadAllBytes("filePath.ext"));
若要在不使用 List(换句话说数组)的情况下执行此操作,请使用 Array.Copy(...) 将第一个和第二个数组复制到更大大小的新数组中。(就个人而言,我更喜欢 C# 中的列表,C++ 中的向量)如果您的最大字节数为 1200000 字节,并且不想从文件中提取所有内容,那么您可以使用以下代码来发挥自己的优势: 在 C# 中将大文件读入字节数组的最佳方法?其中numBytes
是要读入的字节数。