Actualmente estoy tratando de implementar un sistema que verifique la integridad de los archivos que cargo en S3. A través de AWS SDK para JavaScript, puedo recuperar la ETag del objeto remoto; sin embargo, el hash MD5 de mi objeto local no coincide con la ETag. Actualmente estoy usando crypto para generarlo, de la siguiente manera:
var hash = crypto.createHash('md5'); stream = fs.createReadStream(localfile); stream.on('data', function (data) { hash.update(data, 'utf8') }) stream.on('end', function () { md5 = hash.digest('hex'); < rest of the code > });De acuerdo con todos los resultados que encontré mientras buscaba respuestas, las ETags para objetos S3 deberían ser hashes MD5 simples: por ejemplo, la documentación de AWS (énfasis mío):
Para asegurarse de que los datos no se corrompan al atravesar la red, use el encabezado Content-MD5. Cuando utiliza este encabezado, Amazon S3 compara el objeto con el valor MD5 proporcionado y, si no coinciden, devuelve un error. Además, puede calcular el MD5 mientras coloca un objeto en Amazon S3 y compara el ETag devuelto con el valor MD5 calculado.
Sin embargo, mi hash local no coincide con el ETag remoto. ¿Me estoy perdiendo algo aquí?
¡Gracias por tu tiempo!
Aclaración: solo estoy cargando pequeños archivos de texto sin formato y no estoy tratando con cargas de varias partes. He visto que muchas preguntas en la web se refieren a cargas de varias partes, pero esto es solo para cargas simples. ¡Gracias!
Existe un problema entre el teclado y la silla. El problema fue con las cargas de archivos reales y no con la suma md5. Vea la sección de comentarios en la pregunta original.