Bei der Überprüfung der Netzwerksicherheit und der Datenintegrität ist HMAC (Hash-basierte Nachrichtenauthentifizierungscode) eine häufig verwendete und effektive Technologie. Es kombiniert Hash -Funktionen und -tasten, um die Integrität und Identitätsauthentifizierung von Nachrichten zu überprüfen. Die integrierte Hash_HMAC () -Funktion von PHP bietet uns bequeme Tools, um HMAC zu generieren. In diesem Artikel wird jedoch vorgestellt, wie HMAC mithilfe der grundlegenderen Hash () -Funktion manuell implementiert wird.
Die Kernidee von HMAC besteht darin, den Schlüssel vor und nach der Nachricht zu spleißen und dann die Saite nach dem Spleiß zu hash. Im Vergleich zu einfachen Hash -Werten kann HMAC effektiv verhindern, dass Nachrichten manipuliert und nicht leicht geschmiedet werden.
HMAC -Berechnungsformel:
HMAC(key, message) = hash((key ⊕ opad) || hash((key ⊕ ipad) || message))
In:
|| bedeutet den Verbindungsbetrieb
⊕ zeigt bitweise xor an
OPAD ist eine externe Füllung, 0x5c Repeat Fill
iPad ist interne Füllung, 0x36 wiederholte Füllung
Das Folgende zeigt, wie HMAC mithilfe der Funktion PHP Hash () manuell implementiert werden kann:
<?php
function hmac_hash($algo, $key, $data) {
$blocksize = 64; // am meistenhashDie Funktionsblockgröße ist64Byte
if (strlen($key) > $blocksize) {
$key = hash($algo, $key, true); // Wenn der Schlüssel zu lang ist,ErstehashUm einen Binärzeichen mit fester Länge zu bilden
}
$key = str_pad($key, $blocksize, chr(0x00)); // Füllen Sie den Schlüssel zur Blockierung der Größe aus
$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); // Innerer Hash,Ausgabe -Binärformat
$hmac = hash($algo, $outer . $inner_hash);
return $hmac;
}
// prüfen
$key = "secretkey";
$message = "The quick brown fox jumps over the lazy dog";
echo "HMAC-SHA256: " . hmac_hash('sha256', $key, $message);
?>
Der obige Code verwendet den SHA-256-Algorithmus, um HMAC-Berechnungen für die Nachricht und den Schlüssel durchzuführen, und gibt eine hexadezimale Zeichenfolge zurück.
Es wird empfohlen, die mit PHP ausgestattete Hash_HMAC () -Funktion zu verwenden, die effizienter und sicherer ist.
Es wird im Allgemeinen empfohlen, die Hash -Blockgröße mit der Hash -Blockgröße zu entsprechen.
Die Verwendung von Binärausgaben (der dritte Parameter ist auf TRUE eingestellt) ist für Spleißvorgänge förderlich.
HMAC wird hauptsächlich für die Nachrichtenauthentifizierung verwendet, und Schlüssel müssen sicher verwaltet werden.
Obwohl PHP bereits über eine bequeme Funktion von Hash_HMAC () verfügt, wird das Verständnis und die Beherrschung der Prinzipien der Verwendung der Basis -Hash () -Funktion zur Implementierung von HMAC dazu beitragen, den sicheren Hash -Mechanismus besser zu verstehen und somit die sicheren Programmierfunktionen zu verbessern.
Wenn Sie mehr wissen möchten, können Sie https://gitbox.net Ressourcen besuchen.