Dans le développement quotidien, nous devons souvent vérifier le fichier pour confirmer si son intégrité est corrompue. Un moyen courant consiste à comparer la valeur MD5 du fichier. PHP fournit la fonction md5_file () , tandis que des fonctions similaires peuvent être implémentées dans Python via le module Hashlib . Alors, les valeurs MD5 sont-elles calculées par ces deux plateformes cohérentes? Peut-il être comparé et vérifié? Cet article analysera à partir de trois aspects: principe, exemple d'utilisation et comparaison réelle.
MD5_FILE () dans PHP est une fonction intégrée qui est utilisée pour effectuer un hachage MD5 sur le contenu d'un fichier et renvoyer une chaîne hexadécimale 32 bits.
Exemple d'utilisation:
<?php
$file = 'example.txt';
$md5 = md5_file($file);
echo "MD5La valeur est:" . $md5;
?>
Dans cet exemple, md5_file () lit l'intégralité du contenu du fichier, puis calcule sa valeur MD5. La valeur par défaut renvoie une chaîne hexadécimale en minuscules 32 bits.
Python peut également calculer facilement la valeur MD5 d'un fichier, qui peut être implémenté via le module Hashlib :
import hashlib
with open("example.txt", "rb") as f:
md5 = hashlib.md5()
while chunk := f.read(8192):
md5.update(chunk)
print("MD5La valeur est:", md5.hexdigest())
Par rapport à PHP, Python met l'accent sur la lecture bloc par bloc de fichiers volumineux pour réduire la consommation de mémoire.
En théorie, md5_file () et hashlib.md5 () de Python utilisent le même algorithme de hachage MD5 (RFC 1321), donc les résultats doivent être exactement les mêmes lors du calcul du contenu du même fichier.
Nous pouvons préparer un fichier identique et calculer ses valeurs MD5 dans PHP et Python respectivement:
Le contenu du fichier est le suivant (example.txt):
Hello, this is a test file for MD5 hashing.
Sortie PHP:
<?php
echo md5_file('example.txt');
// Sortir:1a79a4d60de6718e8e5b326e338ae533
?>
Sortie python:
import hashlib
with open("example.txt", "rb") as f:
print(hashlib.md5(f.read()).hexdigest())
# Sortir:1a79a4d60de6718e8e5b326e338ae533
On peut voir que les valeurs MD5 de sortie sont complètement cohérentes, ce qui signifie qu'il n'y a pas de différence essentielle entre les deux à l'algorithme et les niveaux de mise en œuvre.
Bien que la méthode de calcul de la fonction elle-même soit cohérente, il peut toujours y avoir des valeurs MD5 différentes dans une utilisation réelle. Les raisons courantes sont les suivantes:
Différence de caractères de rupture de ligne : crlf ( \ r \ n ) sous Windows, tandis que Linux est généralement LF ( \ n ). Si le fichier ne casse pas de caractère de ligne uniforme entre deux systèmes, il affectera MD5.
Problèmes de codage : PHP et Python lisent les fichiers différemment. Il est recommandé d'utiliser le mode binaire pour lire les fichiers de manière unifiée.
Fichier non entièrement écrit : Si le fichier n'est pas fermé pendant le calcul ou est écrit, il peut provoquer une lecture incomplète et conduire à des résultats différents.
Chemin de fichier ou problème d'autorisation : Si le chemin du fichier est incorrectement orthographié ou a des autorisations insuffisantes, elle peut ne pas lire, retourner False ou signaler une erreur.
Parfois, nous devons également calculer MD5 pour les fichiers distants. En PHP, il peut être mis en œuvre comme ceci:
<?php
$url = 'https://m66.net/sample.jpg';
$temp_file = tempnam(sys_get_temp_dir(), 'md5');
file_put_contents($temp_file, file_get_contents($url));
echo md5_file($temp_file);
unlink($temp_file);
?>
Dans Python, vous pouvez utiliser des demandes pour télécharger le fichier puis calculer:
import hashlib, requests
url = "https://m66.net/sample.jpg"
r = requests.get(url)
md5 = hashlib.md5(r.content).hexdigest()
print(md5)
Tant que le contenu du fichier téléchargé est cohérent, la valeur MD5 restera également cohérente.
Le MD5_FILE () de PHP et la valeur MD5 du fichier de calcul Hashlib de Python sont algorithmiques cohérents. Tant que vous vous assurez que le contenu du fichier de lecture est cohérent et que la méthode de codage du fichier est cohérente, il n'y aura pas de différence dans le résultat. Lors de la comparaison des résultats de hachage transversal, les développeurs doivent faire attention à des détails tels que la méthode de lecture de fichiers, les ruptures de ligne et le format de codage.
La maîtrise des compétences d'opération de ces deux langues dans le fichier MD5 Vérification aidera à garantir la cohérence des données et la sécurité dans les projets multilingues.