前几天学习整理了Node.js的crypto
模块,crypto
模块实现了OpenSSL中相关加密码技术,可以用于文件啥希值计算、加密、解密、验证等。最近要做APP升级功能,为了验证APP文件的完整性,需要在服务端计算文件的MD5值,APP升级时会对文件的MD5值进行较验。
计算文件哈希值,需要使用crypto
模块中的Hash
类。Hash
类是一个可读写的Stream
流,要计算文件的哈希值首先要读取文件并创建一个Stream
。在Node.js中,操作文件使用的fs
模块。以下是一个计算文件MD5值的示例,代码如下:
var crypto = require('crypto'); var fs = require('fs'); //从文件创建一个可读流 var stream = fs.createReadStream('./mindpush.apk'); var fsHash = crypto.createHash('md5'); stream.on('data', function(d) { fsHash.update(d); }); stream.on('end', function() { var md5 = fsHash.digest('hex'); console.log("文件的MD5是:%s", md5); });
在上面的示例中,基于流事件监听创建并更新文件哈希流。hash.update
方法,默认传入数据类型为Buffer
。使用fs
模块的fs.readFile
或fs.readFileSync
方法,可以从文件读取一个文件的Buffer
。因此,以上代码可以简化为:
var crypto = require('crypto'); var fs = require('fs'); //读取一个Buffer var buffer = fs.readFileSync('./mindpush.apk'); var fsHash = crypto.createHash('md5'); fsHash.update(buffer); var md5 = fsHash.digest('hex'); console.log("文件的MD5是:%s", md5);
Hash
类除可以计算文件MD5值外,还可用于计算文件的'sha1'
、'sha256'
、'sha512'
等值,使用时修改crypto.createHash('md5')
方法的传入参数即可。