【问题标题】:Calculate Md5 on server side在服务器端计算 Md5
【发布时间】:2015-12-11 21:33:08
【问题描述】:

我正在使用 html5 上传文件并在客户端计算 md5 (JavaScript) 然后在服务器端(处理程序)我将文件切片插入到这样的表中:

public void WriteBlobsToDB(byte[] buffer,int id)
    {
        File_Data fl = new File_Data();
        fl.FileId = id;
        fl.FileChunks = buffer;
        try
        {
            WiFileData.InsertOnSubmit(fl);
            dc.SubmitChanges();
        }
        catch (ExecutionEngineException e){throw e;}
    }

然后当所有文件切片都保存在数据库中时,我尝试读取它们并将它们保存在 byte[] allData 中并将其插入另一个表中:

public void WriteBlobs(int id, string fileName,int count,byte[] allData)
{
    List<chunkInfo> listOfChunks;
    File_Data fd = new File_Data();
    File_List fl = new File_List();
    try
    {   var chunks = (from c in FileData
                      where c.FileId == id
                      orderby c.Id ascending
                      select new chunkInfo
                      {  Id = c.Id,
                         ChunkData = c.FileChunks.ToArray()
                      });
        listOfChunks = chunks.ToList();

        foreach (chunkInfo sChunk in listOfChunks)
        {   fl.FileId = id;
            fl.FileName = fileName;
            int dstoffset = count * sChunk.ChunkData.Length;// count is set to 0 at teh beggginning
            Buffer.BlockCopy(sChunk.ChunkData, 0, allData, dstoffset, sChunk.ChunkData.Length);
            count++;
        }
        int l = allData.Length;
        fl.FileData = new Binary(allData);
        FileList.InsertOnSubmit(fl);
        dc.SubmitChanges();

    }
    catch (Exception){throw;}
}

代码正在运行,我将数据保存在数据库中,最终 allDatasize 与我的文件大小相同。我只需要验证表中Filedata字段中保存的数据是否写入。如何计算 md5 并进行比较?

谢谢

【问题讨论】:

    标签: c# sql-server file-upload linq-to-sql md5


    【解决方案1】:

    如果您要问如何仅在 SQL Server 中执行此操作,您可以简单地利用 HASH_BYTES 函数,如下所示:

    select  stored_md5_column, hashbytes('MD5', Filedata) as md5hash
    from    your_table
    where   stored_md5_column != hashbytes('MD5', Filedata);
    

    根据您存储“stored_md5_column”值的方式,您可能需要将哈希字节的结果转换为其他内容,以便自然地进行正确的相等比较。

    如果您希望在 C# 中执行检查/验证,您可能希望在填充 allData 数组缓冲区后使用 MD5 class 和类似的东西:

    using (var md5Obj = MD5.Create())
    {
        var md5Hash = md5Obj.ComputeHash(allData);
    }
    

    这假设您的 allData 是一个字节数组(我无法从您的代码中看出)。如果它不是字节数组,您首先需要将其转换为标准字节数组或流以传递给 MD5 ComputeHash 方法。

    【讨论】:

      猜你喜欢
      • 2012-03-31
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 2017-08-25
      • 1970-01-01
      • 2014-07-05
      • 1970-01-01
      • 2016-02-12
      相关资源
      最近更新 更多