Dans la sécurité de la sécurité du réseau et l'intégrité des données, HMAC (code d'authentification des messages basé sur le hachage) est une technologie couramment utilisée et efficace. Il combine les fonctions de hachage et les clés pour vérifier l'intégrité et l'authentification d'identité des messages. La fonction HASH_HMAC () intégrée de PHP nous fournit des outils pratiques pour générer HMAC, mais cet article présentera comment implémenter manuellement HMAC en utilisant la fonction Hash () plus basique.
L'idée principale de HMAC est d'épisser la clé avant et après le message, puis de hacher la chaîne après l'épissage. Par rapport aux valeurs de hachage simples, HMAC peut empêcher efficacement les messages d'être falsifiés et pas facilement forgés.
Formule de calcul HMAC:
HMAC(key, message) = hash((key ⊕ opad) || hash((key ⊕ ipad) || message))
dans:
|| Signifie le fonctionnement de la connexion
⊕ indique XOR dans le sens bit
OPAD est un remplissage externe, 0x5c Repreing Fill
L'ipad est un remplissage interne, 0x36 Représent le remplissage
Ce qui suit montre comment implémenter manuellement HMAC à l'aide de la fonction PHP Hash () :
<?php
function hmac_hash($algo, $key, $data) {
$blocksize = 64; // la pluparthashLa taille du bloc fonction est64octet
if (strlen($key) > $blocksize) {
$key = hash($algo, $key, true); // Si la clé est trop longue,D'abordhashPour former une chaîne binaire de longueur fixe
}
$key = str_pad($key, $blocksize, chr(0x00)); // Remplissez la clé pour bloquer la taille
$ipad = str_repeat(chr(0x36), $blocksize);
$opad = str_repeat(chr(0x5c), $blocksize);
$inner = $key ^ $ipad;
$outer = $key ^ $opad;
$inner_hash = hash($algo, $inner . $data, true); // Hachage intérieur,Format binaire de sortie
$hmac = hash($algo, $outer . $inner_hash);
return $hmac;
}
// test
$key = "secretkey";
$message = "The quick brown fox jumps over the lazy dog";
echo "HMAC-SHA256: " . hmac_hash('sha256', $key, $message);
?>
Le code ci-dessus utilise l'algorithme SHA-256 pour effectuer des calculs HMAC sur le message et la clé, et renvoie une chaîne hexadécimale.
Il est recommandé d'utiliser la fonction hash_hmac () qui est livrée avec PHP, ce qui est plus efficace et sûr.
La longueur de clé est généralement recommandée comme étant la même que la taille du bloc de hachage.
L'utilisation de la sortie binaire (le troisième paramètre est défini sur true ) est propice aux opérations d'épissage.
HMAC est principalement utilisé pour l'authentification des messages et les clés doivent être gérées en toute sécurité.
Bien que PHP ait déjà une fonction Hash_HMAC () pratique, la compréhension et la maîtrise des principes de l'utilisation de la fonction Hash () de base pour implémenter HMAC aidera à mieux comprendre le mécanisme de hachage sécurisé et ainsi améliorer les capacités de programmation sécurisées.
Si vous voulez en savoir plus, vous pouvez visiter les ressources connexes https://gitbox.net .