如何知道上传的文件是否已更改?

Any*_*are 3 javascript c# asp.net file-io file-upload

如果用户将某个文件上传到我的服务器,并且我想确保该文件在上次用户上传时没有更改,我该如何获取此信息?

我有一个日志表User_idFileName(这User_id是唯一的).我在阅读完内容后删除了该文件.

dri*_*iis 7

您可以在删除文件之前存储该文件的哈希值.要查看它是否是正在上载的文件,请将哈希与前一个哈希进行比较.您可以使用System.Cryptography中的一个HashAlgorithm类(如SHA1)执行此操作.

"加密散列函数是一个确定性过程,它接受任意数据块并返回固定大小的位串,即(加密)散列值,这样对数据的意外或有意改变将改变散列值"

这里有一些示例代码可以帮助您入门,假设变量stream是包含文件数据的流(您可以使用FileStream它来打开它):

var sha = new System.Security.Cryptography.SHA1Managed();
byte [] hash = sha.ComputeHash(stream);
Run Code Online (Sandbox Code Playgroud)

现在,变量hash将包含散列,即文件内容的指纹.即使很小的更改(例如单个位)也会导致不同的哈希值,但在同一个文件上获取哈希将始终返回相同的哈希值.

  • 您不需要为此选择"正确"的哈希算法而过于担心,如果您只需要知道文件是否发生更改,System.Security.Cryptography中的所有哈希类就足够了.SHA1或其他SHA变体是常见的选择.如果这是出于安全目的,选择正确的算法将更为重要. (4认同)
  • 是的,即使更改1个字节的数据,哈希值的一半位也会发生变化.哈希算法就是这样设计的. (2认同)
  • base64与散列无关,但在某些情况下,存储在base64中编码的散列是切实可行的.我用一个例子更新了. (2认同)