Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Protección de la integridad de los datos con sumas de comprobación
Amazon Simple Storage Service (Amazon S3) permite especificar una suma de comprobación al cargar un objeto. Cuando se especifica una suma de comprobación, esta se almacena con el objeto y se puede validar cuando se descarga el objeto.
Las sumas de comprobación proporcionan un nivel adicional de integridad de los datos al transferir archivos. Con las sumas de comprobación, puede comprobar la coherencia de datos verificando que el archivo recibido coincide con el archivo original. Para obtener más información sobre las sumas de comprobación con Amazon S3, consulte la Guía del usuario de Amazon Simple Storage Service, que incluye los algoritmos compatibles.
Puede elegir el algoritmo que mejor se adapte a sus necesidades y dejar que el SDK calcule la suma de comprobación. También puede especificar un valor de suma de comprobación precalculada mediante uno de los algoritmos compatibles.
nota
A partir de la versión 3.337.0 del AWS SDK for PHP, el SDK proporciona una protección de integridad predeterminada al calcular automáticamente una suma de verificación para las cargas. CRC32 El SDK calcula esta suma de comprobación si no se proporciona un valor de suma de comprobación precalculado o si no se especifica un algoritmo que el SDK deba utilizar para calcular una suma de comprobación.
El SDK también proporciona una configuración global para las protecciones de la integridad de los datos que puede configurar de forma externa, sobre la que puede leer en la Guía de referencia de herramientas AWS SDKs y herramientas.
importante
Para trabajar con el CRC32C algoritmo, su entorno PHP requiere la instalación de la extensión AWS Common Runtime (AWS CRT).
Analizaremos las sumas de comprobación en dos fases de solicitud: carga del objeto y descarga del objeto.
Cargar un objeto
Para cargar objetos en Amazon S3, use el método putObject de S3Client. Utilice el par ChecksumAlgorithm de la matriz de parámetros para habilitar el cálculo de la suma de comprobación y especificar el algoritmo.
$client = new \Aws\S3\S3Client(['region' => 'us-east-2']); // See the note below. $result = $client->putObject([ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'key', 'ChecksumAlgorithm' => 'CRC32', 'Body' => 'Object contents to test the checksum.' ]);
Si no proporciona un algoritmo de suma de comprobación con la solicitud, el comportamiento de la suma de comprobación varía en función de la versión del SDK que utilices, tal y como se muestra en la siguiente tabla.
Comportamiento de la suma de comprobación cuando no se proporciona ningún algoritmo de suma de comprobación
| Versión del SDK de PHP | Comportamiento de la suma de comprobación |
|---|---|
| antes de 3.337.0 | El SDK no calcula automáticamente una suma de comprobación basada en CRC ni la proporciona en la solicitud. |
| 3.337.0 o posterior | El SDK usa el algoritmo |
Utilizar un valor de suma de comprobación calculado previamente
Un valor de suma de comprobación precalculado proporcionado con la solicitud desactiva el cálculo automático por parte del SDK y utiliza el valor proporcionado en su lugar.
El siguiente ejemplo muestra una solicitud con una suma de control calculada previamente SHA256.
use Aws\S3\S3Client; use GuzzleHttp\Psr7; $client = new S3Client([ 'region' => 'us-east-1', ]); // Calculate the SHA256 checksum of the contents to be uploaded. $contents = 'Object contents to test the checksum.'; $body = Psr7\Utils::streamFor($contents); $sha256 = base64_encode(Psr7\Utils::hash($body, 'sha256', true)); $result = $client->putObject([ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'key', 'Body' => $body, 'ChecksumSHA256' => $sha256 ]);
Si Amazon S3 determina que el valor de la suma de comprobación es incorrecto para el algoritmo especificado, el servicio devuelve una respuesta de error.
Cargas multiparte
También puede utilizar sumas de comprobación en las cargas multiparte.
Como se muestra en el ejemplo siguiente, especifique el algoritmo de suma de comprobación como un par de clave-valor en la matriz params del constructor MultipartUploader.
$s3Client = new S3Client([ 'region' => 'us-east-1' ]); $stream = fopen("/path/to/large/file", "r"); $mpUploader = new MultipartUploader($s3Client, $stream, [ 'bucket' => 'amzn-s3-demo-bucket', 'key' => 'key', 'params' => ['ChecksumAlgorithm' => 'CRC32'] ]);
Descargar un objeto
Cuando se utiliza el método getObject para descargar un objeto, el SDK valida automáticamente la suma de comprobación cuando el valor de la clave ChecksumMode es enabled
La solicitud del siguiente fragmento indica al SDK que valide la suma de comprobación de la respuesta calculándola y comparando los valores.
$result = $client->getObject([ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'test-checksum-key', 'ChecksumMode' => 'enabled', ]);
nota
Si el objeto no se cargó con una suma de comprobación, no se realizará ninguna validación.