附加字节和流

时间:2013-12-18 21:18:22

标签: c# file-io stream byte bytearray

我想将字节数组附加到我打开的流,但只是将其传递给哈希算法并计算哈希值,如:

byte[] data;

using (BufferedStream bs = new BufferedStream(File.OpenRead(path), 1200000))
{
    MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

    byte[] hash = md5.ComputeHash(data + bs);
}

我不知道怎么做“数据+ bs”或“bs +数据”部分...对此有何想法?

3 个答案:

答案 0 :(得分:2)

为什么你不能简单地做这样的事情:

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 ;
}

答案 1 :(得分:0)

这样做:

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();
    }
}

答案 2 :(得分:0)

// 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字节,并且不想从文件中提取所有内容,那么您可以使用此代码:Best way to read a large file into a byte array in C#?其中{{1是你想要读入的字节数。