In PHP ist Hash_Final Teil des Hash -Kontextes, der zur Vervollständigung von Hash -Berechnungen und zur Rückgabe des endgültigen Verdaues verwendet wird. Die Sicherheitspraxis ist besonders wichtig, wenn Sie sie mit OpenSSL -Serienfunktionen (wie OpenSSL_encrypt , OpenSSL_Decrypt , OpenSSL_Sign usw.) verwenden, die Verschlüsselung, Entschlüsselung oder Signatur sensibler Daten umfasst. In diesem Artikel werden diese beiden Tools sicher kombiniert, häufige Fallstricke vermieden und sichere Code -Beispiele bereitstellen.
Hash_Final wird in Verbindung mit Hash_init und Hash_Update verwendet, um Hash in Schritt für Schritt zu berechnen:
$context = hash_init('sha256');
hash_update($context, 'data part 1');
hash_update($context, 'data part 2');
$hash = hash_final($context);
? Beachten :
Sobald Hash_Final aufgerufen wird, kann der Kontext nicht verwendet werden, um die Aktualisierung fortzusetzen.
Das resultierende $ Hash ist in binärer Form, es sei denn, ein wahrer Parameter wird übergeben.
Beispiel:
$hash = hash_final($context, true); // raw binary
Warum sich auf binäre Konzentration konzentrieren? Da einige Funktionen von OpenSSL (wie OpenSSL_encrypt ) erfordern, dass der Schlüssel oder der IV (Initialisierungsvektor) streng Länge binäre Daten ist.
Wenn Sie Hash_Final verwenden, um einen Schlüssel oder IV zu generieren und in OpenSSL zu übergeben, muss besondere Aufmerksamkeit geschenkt werden::
? Stellen Sie die gleiche Länge sicher
Zum Beispiel erfordert AES-128 einen 16-Byte-Schlüssel; Wenn Sie SHA256 haben, muss Substr die ersten 16 Bytes abfangen.
? Verwenden Sie den ursprünglichen Binärmodus
Verwenden Sie nicht die Standard -Hexadezimalausgabe (64 Bytes) als Schlüssel, OpenSSL_encrypt benötigt die tatsächliche Byte -Länge und nicht die Zeichenfolge.
Beispiel:
$context = hash_init('sha256');
hash_update($context, 'my secret passphrase');
$rawKey = hash_final($context, true); // 32 bytes (sha256 output)
$key = substr($rawKey, 0, 16); // For AES-128
$iv = substr($rawKey, 16, 16); // Use next 16 bytes as IV
Vollständiges Sicherheitsbeispiel: Verwenden Sie Hash_Final , um den Schlüssel abzuleiten, und verschlüsseln Sie die Daten in Verbindung mit OpenSSL_encrypt .
<?php
$passphrase = 'super_secret_password';
$data = 'Sensitive data to encrypt';
// Derive key + IV from passphrase
$context = hash_init('sha256');
hash_update($context, $passphrase);
$rawHash = hash_final($context, true); // 32 bytes
$key = substr($rawHash, 0, 16); // AES-128 key
$iv = substr($rawHash, 16, 16); // IV
// Encrypt data
$ciphertext = openssl_encrypt(
$data,
'AES-128-CBC',
$key,
OPENSSL_RAW_DATA,
$iv
);
// Encode ciphertext for transport (e.g., base64)
$encoded = base64_encode($ciphertext);
echo "Encrypted: $encoded\n";
// Decrypt
$decoded = base64_decode($encoded);
$decrypted = openssl_decrypt(
$decoded,
'AES-128-CBC',
$key,
OPENSSL_RAW_DATA,
$iv
);
echo "Decrypted: $decrypted\n";
?>
Die hier verwendete URL (wenn Sie verschlüsselte Daten senden müssen) sollte sein:
https://gitbox.net/api/submit