在Javascript中获取文件的MD5校验和

时间:2014-04-25 11:21:07

标签: jquery javascript-events facebook-javascript-sdk javascript

如何计算java脚本中特定文件的md5

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
    <head>
        <title></title>
        <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/md5.js"></script>
    <script>
    var hash = CryptoJS.MD5("c23a340c2299871541d8a9d2e47bd7d5.wmv");
    alert(hash);
    </script>
    </head>
    <body>

    </body>
</html>

这是一个示例代码所以在这个我们可以得到MD5的srting我发现像这些例子sevaral但我想它的特定文件,如下面的链接将给md5的文件 This link will calculate the md5 for a file so like this i want the javascript to calculate the md5 for a file

2 个答案:

答案 0 :(得分:0)

根据我对散列函数的小理解,你的代码正在做的是给出字符串的散列,你已经说过了。要散列文件的内容,您可能希望将文件读入字节流(不确定这是否是正确的术语),并对结果字节进行散列。

下面是他们的JS代码片段,展示了如何将文件加载到字节流中。

/*
 * (c) 2011 by md5file.com. All rights reserved.
 */
function hash_file(file, workers) {
  var i, buffer_size, block, threads, reader, blob, handle_hash_block, handle_load_block;

  handle_load_block = function (event) {
    for( i = 0; i < workers.length; i += 1) {
      threads += 1;
      workers[i].postMessage({
        'message' : event.target.result,
        'block' : block
      });
    }
  };
  handle_hash_block = function (event) {
    threads -= 1;

    if(threads === 0) {
      if(block.end !== file.size) {
        block.start += buffer_size;
        block.end += buffer_size;

        if(block.end > file.size) {
          block.end = file.size;
        }
        reader = new FileReader();
        reader.onload = handle_load_block;
        blob = file.slice(block.start, block.end);

        reader.readAsArrayBuffer(blob);
      }
    }
  };
  buffer_size = 64 * 16 * 1024;
  block = {
    'file_size' : file.size,
    'start' : 0
  };

  block.end = buffer_size > file.size ? file.size : buffer_size;
  threads = 0;

  for (i = 0; i < workers.length; i += 1) {
    workers[i].addEventListener('message', handle_hash_block);
  }
  reader = new FileReader();
  reader.onload = handle_load_block;
  blob = file.slice(block.start, block.end);

  reader.readAsArrayBuffer(blob);
}

答案 1 :(得分:0)

作为NotAPro guessed,要获取文件的校验和,本地执行浏览器及其JS引擎需要读取文件内容,这只能满足以下要求:

http://www.html5rocks.com/en/tutorials/file/dndfiles/是如何做到这一点的指南。它对FileList和Blob API有额外的依赖性,但我认为这些依赖于File API。

顺便说一下,我看到这个问题寻找校验和方法(对于cookie中的简单电子邮件地址),我将使用SHA-256算法 http://pajhome.org.uk/crypt/md5/scripts.html
在那里,保罗还包括一个贡献的sha1_stream()来源,它可以作为文件/字节流操作的黑客食物。

如果完美是一个问题,我提醒你MD5和SHA1坏了。