Lors du téléchargement de fichiers, assurer l'intégrité et la sécurité des fichiers est une étape très importante. Pour vérifier si le fichier a été falsifié pendant le téléchargement, nous pouvons utiliser la vérification du hachage. PHP fournit la fonction hash_update_stream , qui peut hacher efficacement la vérification des fichiers volumineux.
Cet article introduira en détail comment utiliser la fonction hash_update_stream pour effectuer une vérification de hachage des fichiers et assurer la sécurité des fichiers.
hash_update_stream est une fonction de hachage intégrée dans PHP. Il peut traiter un flux (tel qu'un flux de fichiers) en temps réel et le hacher. Par rapport au chargement du fichier entier en même temps pour la vérification du hachage, la fonction hash_update_stream peut enregistrer les ressources de mémoire et convient à la vérification des fichiers volumineux.
La signature de la fonction est la suivante:
bool hash_update_stream ( resource $context , resource $file )
$ Context : Hash Context Resource, créé par la fonction hash_init .
$ File : Fichier Resource, généralement un flux de fichiers ouvert par la fonction FOPEN .
Lors du téléchargement de fichiers, vous utilisez généralement le tableau Hyperglobal $ _Files pour obtenir des informations de fichier. Avant d'effectuer une vérification du hachage, nous devons vérifier si le fichier est valide et le traiter.
Voici un exemple de base de téléchargement d'un fichier:
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
$file = $_FILES['file'];
// Vérifiez si le fichier est téléchargé avec succès
if ($file['error'] === UPLOAD_ERR_OK) {
$filePath = $file['tmp_name']; // Chemin de fichier temporaire
$fileName = $file['name'];
// Effectuer une vérification du hachage
if (checkFileHash($filePath)) {
echo "Fichier la vérification du hachage avec succès,Sécurité des dossiers。";
} else {
echo "La vérification du hachage du fichier a échoué,Le fichier a peut-être été falsifié。";
}
} else {
echo "Le téléchargement de fichiers a échoué,Code d'erreur:" . $file['error'];
}
}
Ensuite, nous écrivons une fonction CheckFileHash , qui hash_update_stream pour hacher le fichier téléchargé.
function checkFileHash($filePath) {
// Créer unSHA256Contexte de hachage
$hashContext = hash_init('sha256');
// Ouvrez le flux de fichiers
$fileStream = fopen($filePath, 'rb');
if ($fileStream === false) {
return false; // 无法Ouvrez le flux de fichiers
}
// utiliser hash_update_stream Hachant le flux de fichiers
if (hash_update_stream($hashContext, $fileStream)) {
// Obtenez la valeur de hachage finale
$fileHash = hash_final($hashContext);
fclose($fileStream);
// Vous pouvez comparer la valeur de hachage à la valeur attendue,Assurez-vous que le fichier n'a pas été falsifié
// Exemples de valeurs ici `Valeur de hachage attendue` Par exemple,Vous devez le remplacer par la valeur de hachage correcte réelle
$expectedHash = 'Valeur de hachage attendue';
return $fileHash === $expectedHash;
}
fclose($fileStream);
return false; // Le calcul du hachage a échoué
}
Le principal avantage de la fonction hash_update_stream est qu'il peut gérer les données de streaming sans charger le fichier entier en mémoire. Pour les fichiers volumineux, l'utilisation de hash_update_stream est plus efficace que le chargement de l'ensemble du fichier à la fois et le calcul du hachage, en particulier dans les environnements avec des ressources de mémoire limitées.
En utilisant la fonction hash_update_stream pour la vérification de hachage sur les fichiers téléchargés, il peut non seulement empêcher efficacement les fichiers d'être falsifiés pendant le téléchargement, mais également gérer les fichiers volumineux et éviter de consommer trop de mémoire. En combinant la valeur de hachage du fichier avec la valeur attendue, nous pouvons vérifier l'intégrité du fichier, améliorant ainsi la sécurité du système.
Dans les applications pratiques, vous pouvez sélectionner différents algorithmes de hachage (tels que Sha256 , MD5 , etc.) en fonction de vos besoins pour effectuer une vérification des fichiers.