使用 javascript 的文件的 MD5 哈希

MD5 hash of a file using javascript

我要从前端上传一个文件,计算文件的md5哈希值。 我尝试使用 crypto.js 生成 md5,但对于图像,它给了我错误的 md5。 我看到一个名为 onlinemd5.com 的网站,它正是我所需要的。

任何人都可以帮助我如何使用 javascript 计算文件(文本文件、图像、视频等)的 md5 哈希值? 是否可以从http://onlinemd5.com下载代码并实现?

注意:我尝试了 How to calculate md5 hash of a file using javascript 中的一些建议,但没有用。


$scope.upld = function(element){
    $scope.files = element.files;
    var file = $scope.files[0];
    var reader = new FileReader();
    reader.onload = function(){
        $scope.md5_val = CryptoJS.MD5(reader.result);
        $scope.upload_file();
        $scope.$apply();
    };
    reader.readAsBinaryString(file);
};

crypto.js 没有正确计算图像 md5。不过我没有尝试 sparkmd5 js。

我使用 reader.readAsArrayBuffer() 让它工作:

$(inputElement).change(
    function () {
        var reader = new FileReader();
        
        reader.addEventListener(
            'load',
            function () {
                var wordArray = CryptoJS.lib.WordArray.create(this.result);
                console.log(CryptoJS.MD5(wordArray));
            }
        );
        
        reader.readAsArrayBuffer(this.files[0]);
    }
);

我不得不从 CryptoJS 添加一个额外的依赖项:https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js

jsFiddle here.

我使用了 https://github.com/satazor/SparkMD5 的 spark-md5.js 它很棒而且非常快。如果有人试图计算任何上传文件的 md5,这是最好的解决方案。