在服务器端计算Md5
本文关键字:Md5 计算 服务器端 | 更新日期: 2023-09-27 18:12:46
我正在上传一个使用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并比较它?
谢谢
如果你想问如何在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类和类似的东西:
using (var md5Obj = MD5.Create())
{
var md5Hash = md5Obj.ComputeHash(allData);
}
这假设你的allData是一个字节数组(我无法从你的代码中看出)。如果它不是字节数组,则首先需要将其转换为标准字节数组或流,以传递给MD5 ComputeHash方法。