Protezione dell'integrità dei dati con checksum - AWS SDK per PHP

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Protezione dell'integrità dei dati con checksum

Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) offre la possibilità di specificare un checksum quando carichi un oggetto. Quando specifichi un checksum, questo viene memorizzato con l'oggetto e può essere convalidato quando l'oggetto viene scaricato.

I checksum forniscono un ulteriore livello di integrità dei dati durante il trasferimento dei file. Con i checksum, è possibile verificare la coerenza dei dati confermando che il file ricevuto corrisponde al file originale. Per ulteriori informazioni sui checksum con Amazon S3, consulta la Guida per l'utente di Amazon Simple Storage Service, che include gli algoritmi supportati.

Hai la flessibilità di scegliere l'algoritmo più adatto alle tue esigenze e lasciare che sia l'SDK a calcolare il checksum. In alternativa, puoi fornire un valore di checksum precalcolato utilizzando uno degli algoritmi supportati.

Nota

A partire dalla versione 3.337.0 di, l'SDK fornisce una protezione di integrità predefinita calcolando AWS SDK per PHP automaticamente un checksum per i caricamenti. CRC32 L'SDK calcola questo checksum se non fornisci un valore di checksum precalcolato o se non specifichi un algoritmo che l'SDK deve utilizzare per calcolare un checksum.

L'SDK fornisce anche impostazioni globali per la protezione dell'integrità dei dati che puoi impostare esternamente, come puoi leggere nella Guida di riferimento agli strumenti.AWS SDKs

Importante

Per utilizzare l'CRC32Calgoritmo, l'ambiente PHP richiede l'installazione dell'estensione AWS Common Runtime (CRT).AWS

Discutiamo i checksum in due fasi di richiesta: caricamento di un oggetto e download di un oggetto.

Caricamento di un oggetto

Carichi oggetti su Amazon S3 utilizzando il metodo putObject di. S3Client Utilizza la ChecksumAlgorithm coppia nell'array di parametri per abilitare il calcolo del checksum e specificare l'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.' ]);

Se non fornisci un algoritmo di checksum con la richiesta, il comportamento del checksum varia a seconda della versione dell'SDK che usi, come mostrato nella tabella seguente.

Comportamento del checksum quando non viene fornito alcun algoritmo di checksum

Versione PHP SDK Comportamento del checksum
precedente alla versione 3.337.0 L'SDK non calcola automaticamente un checksum basato su CRC e lo fornisce nella richiesta.
3.337.0 o versione successiva

L'SDK utilizza l'CRC32algoritmo per calcolare il checksum e lo fornisce nella richiesta. Amazon S3 convalida l'integrità del trasferimento calcolando il proprio CRC32 checksum e lo confronta con il checksum fornito dall'SDK. Se i checksum corrispondono, il checksum viene salvato con l'oggetto.

Utilizza un valore di checksum precalcolato

Un valore di checksum precalcolato fornito con la richiesta disabilita il calcolo automatico da parte dell'SDK e utilizza invece il valore fornito.

L'esempio seguente mostra una richiesta con un checksum precalcolato. 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 ]);

Se Amazon S3 determina che il valore del checksum non è corretto per l'algoritmo specificato, il servizio restituisce una risposta di errore.

Caricamenti in più parti

Puoi anche utilizzare i checksum con caricamenti in più parti.

Come illustrato nell'esempio seguente, specificate l'algoritmo di checksum come coppia chiave-valore nell'array del costruttore. paramsMultipartUploader

$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'] ]);

Donwload di un oggetto

Quando utilizzate il metodo getObject getObject , l'SDK convalida automaticamente il checksum quando il valore della chiave è. ChecksumMode enabled

La richiesta nel seguente frammento indica all'SDK di convalidare il checksum nella risposta calcolando il checksum e confrontando i valori.

$result = $client->getObject([ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'test-checksum-key', 'ChecksumMode' => 'enabled', ]);
Nota

Se l'oggetto non è stato caricato con un checksum, non viene effettuata alcuna convalida.