【问题标题】:Getting a File's MD5 Checksum in Javascript在 Javascript 中获取文件的 MD5 校验和
【发布时间】:2014-04-25 11:21:06
【问题描述】:

如何计算 Javascript 中特定文件的 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 进行排序;只有我发现几个像这些例子,但我想要一个特定的文件,比如下面的链接会给一个文件的 md5: This link will calculate the md5 for a file so like this I want the Javascript to calculate the md5 for a file

【问题讨论】:

    标签: javascript jquery facebook-javascript-sdk md5


    【解决方案1】:

    从我对散列函数的了解来看,您的代码所做的是给出字符串的散列值,正如您所说。为了让它对文件的内容进行哈希处理,您需要将文件读入字节流(不确定这是否是正确的术语),并对生成的字节进行哈希处理。

    下面是他们的 JS 代码的 sn-p,显示他们如何将文件加载到字节流中。

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

    【讨论】:

      【解决方案2】:

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

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

      顺便说一句,我看到这个问题正在寻找校验和方法(用于 cookie 中的简单电子邮件地址),我将使用
      http://pajhome.org.uk/crypt/md5/scripts.html 的 SHA-256 算法。
      在那里,Paul 还提供了一个贡献的 sha1_stream() 源,这将是破解文件/字节流操作的食物。

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

      【讨论】:

        猜你喜欢
        • 2010-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 2012-05-18
        • 1970-01-01
        相关资源
        最近更新 更多