node.js - 将 S3 对象的内容流式传输到哈希算法 node.js

标签 node.js aws-lambda md5

我是node.js新手,我正在尝试编写一个AWS lambda函数,该函数将s3对象的内容流式传输到 Node 的加密模块中,以创建s3对象的md5校验和值。不知道为什么,但每次我运行代码时,它都会在 console.log 上生成不同的哈希值。谁能指出我修复代码的正确方向?感谢您的帮助!

var crypto = require('crypto');
var fs = require('fs');
var AWS = require('aws-sdk'); 
var s3 = new AWS.S3(); 

exports.handler = (event, context, callback) => {

 var params = {
    Bucket: 'bucket_name',
    Key: 'key', 
 };

var hash = crypto.createHash('md5');
var stream = s3.getObject(params, function(err, data) {
  if (err){
    console.log(err);
    return;
  }
}).createReadStream();

stream.on('data', function (data) {
    hash.update(data, 'utf-8')
})

stream.on('end', function () {
    console.log(hash.digest('hex'))
})

};

最佳答案

你很接近。您将“callback”样式方法签名与“createReadStream”签名混合在一起。试试这个:

const crypto = require('crypto');
const fs = require('fs');
const AWS = require('aws-sdk');
const s3 = new AWS.S3();

exports.handler = (event, context, callback) => {
  let params = {
    Bucket: 'bucket_name',
    Key: 'key',
  };

  let hash = crypto.createHash('md5');
  let stream = s3.getObject(params).createReadStream();
  stream.on('data', (data) => {
    hash.update(data);
  });

  stream.on('end', () => {
    let digest = hash.digest('hex');
    console.log(digest);
    callback(null, digest);
  });
};

关于node.js - 将 S3 对象的内容流式传输到哈希算法 node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45969961/

相关文章:

javascript - 将对象从 SQL 查询函数传递到单独的函数

python-3.x - 使用 python3 构建 sklearn lambda 的 EFL 加载命令错误

perl - 流中文件的 MD5。珀尔

node.js - 为什么 Travis CI 报告构建成功,即使 npm 发布失败?

node.js - Websocket 431 错误 : Unexpected server response

node.js - nodejs-redis(&connect-redis)是如何处理sync和async的?

amazon-web-services - 在权限策略中将 AWS Lambda 设置为委托(delegate)人

amazon-web-services - 允许 AWS Lex 接受任何用户输入

md5 - md5误报校验和的可能性有多大?

security - 我可以通过对现有 MD5 哈希加盐并使用 Scrypt 或 PBKDF2 HMACSHA256 对结果进行哈希处理来提高 MD5 哈希密码的安全性吗?