4

我们目前正在计划一个人们可以上传电影的网站。在查看 YouTube 时,您会注意到某些电影被上传了两次或更多次(由不同的用户)。为了扩展我们的应用程序,我们正在考虑以下想法:

  1. 用户选择要上传的电影文件
  2. JavaScript 会在文件上传之前从文件中获取 SHA256 哈希(它比 MD5 哈希更准确)
  3. 该网站将检查哈希是否已存在
  4. 如果哈希不存在,文件将被上传
  5. 如果哈希确实存在,则会提示一条消息,或者将创建对服务器上现有版本的引用。这没有上传视频。

问:我们如何使用 JavaScript 分析文件以获得 SHA256 哈希值,SHA256 是否足够好,还是应该考虑 SHA512(或其他算法)?

4

3 回答 3

6

使用 HTML5 File API 读取文件:http ://www.html5rocks.com/en/tutorials/file/dndfiles 。下面是计算 SHA-256 的 JS 代码:http ://www.webtoolkit.info/javascript-sha256.html

我必须补充一点,我从未尝试过,但这似乎是可能的。Alxandr 是对的,对于大型视频,这需要很长时间,但您可以尝试使用 WebWorker API 以免冻结浏览器:http: //html5rocks.com/en/tutorials/workers/basics

于 2011-12-04T01:39:05.603 回答
1

现在把文件放在一边,如果问题实际上是是否有可能在 JavaScript 中获得 SHA-256 哈希,答案是肯定的。您可以自己重新实现(坏主意)或使用斯坦福 JS Crypto 库之类的库(好主意)。

File API而言,它已在每个主要桌面浏览器的最前沿版本以及最新的 Android 浏览器中实现。不支持 iOS,因为它实际上没有文件系统。查看caniuse.com了解最新统计数据。

于 2011-12-04T01:42:04.370 回答
-1

简单的回答,你不能。也就是说,如果您想至少支持所有浏览器。我认为 Chrome 和 FireFox 都支持在客户端读取文件,而 IE 在 ActiveX 控件的帮助下支持它,但要获得适用于所有浏览器的解决方案,您必须使用 Flash 或 Silverlight 等插件。此外,在进行视频大小(大+文件)的文件上传时,我认为从一开始就使用闪存或类似的东西无论如何都是一个好主意,但这只是我的意见。

于 2011-12-04T01:36:23.050 回答