Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Verschlüsselung

PHP-Verschlüsselung

WBOY
WBOYOriginal
2024-08-29 13:02:191097Durchsuche

PHP-Verschlüsselung ist nichts anderes, als den Verschlüsselungscode mithilfe einiger Algorithmen zu erhalten, die manchmal als Hashing-Algorithmen bezeichnet werden. Sie arbeiten normalerweise mit einer Zeichenfolge oder einer anderen Eingabe und helfen dann bei der Erstellung eines eindeutigen Fingerabdrucks aus der Zeichenfolge /andere. Bei der Verschlüsselung wird der bestimmte Text/andere Texte in einen anderen Codetext oder Ähnliches umgewandelt, um die Daten sicher zu machen, ohne dass sie den meisten Personen zugänglich gemacht werden, außer einigen, die Zugriff darauf haben. Schauen Sie sich unten die verschiedenen Arten von PHP-Verschlüsselungsmethoden an.

WERBUNG Beliebter Kurs in dieser Kategorie PHP-ENTWICKLER - Spezialisierung | 8-Kurs-Reihe | 3 Probetests

Starten Sie Ihren kostenlosen Softwareentwicklungskurs

Webentwicklung, Programmiersprachen, Softwaretests und andere

Arten der PHP-Verschlüsselung

Heutzutage werden viele verschiedene Arten von Verschlüsselungsmethoden verwendet, aber üblicherweise erfolgt dies durch Hashing, und die zweite ist die Verschlüsselung mit geheimen Schlüsseln und die dritte ist die Umschlagverschlüsselungsmethode. Für jede Verschlüsselungsmethode stehen mehrere Algorithmen oder Verschlüsselungsverfahren zur Auswahl (jede hat ihre eigenen Schwächen und Stärken). Hier konzentrieren wir uns auf die Implementierung von Hashing und die Verschlüsselung mit geheimen Schlüsseln.

1. Hashing

Der Hashing-Algorithmus der Programmiersprache PHP nimmt normalerweise einen Eingabewert und wandelt ihn dann in einen Nachrichtenauszug um. Kurz gesagt: Die Klartextwerte werden in Hash-Werte mit fester Länge umgewandelt und können nur unter Umgehung eines Originalwerts an den eindeutigen Hash-Algorithmus validiert werden. Dadurch eignet sich das Hashing perfekt zum Speichern aller Benutzerkennwörter.

Es ist nur erwähnenswert, dass das Hashing keineswegs eine sichere Lösung für unsere Abfrage ist, aber einige haben nicht alle Hashing-Algorithmen, die gleich sind. Wir haben die effizienten und schnellen MD5- und SHA1-Algorithmen in Betracht gezogen und all diese Dinge dann ideal für die Dateiüberprüfung und Prüfsummenbildung gemacht. Aufgrund ihrer Geschwindigkeit sind die meisten davon ungeeignet, das Passwort des Benutzers zu hashen. Mit der Rechenleistung moderner GPUs kann das Passwort allein mit Hilfe roher Gewalt in wenigen Minuten geknackt werden, indem einfach das ursprüngliche Klartext-Passwort bzw. die ursprünglichen Klartext-Passwörter und absichtlich der langsamere Hash-Algorithmus bzw. die langsameren Hash-Algorithmen, die bcrypt ähneln, preisgegeben werden oder Argon2 wird verwendet.

Durch das Hashing des mit einem Algorithmus generierten Passworts werden die tatsächlichen und ursprünglichen Daten mit Sicherheit verdeckt und der Angreifer wird verlangsamt, während die Entwickler einen der stärksten verfügbaren Algorithmen ausprobieren sollten. Die PHP-Sprache verfügt über eine grundlegende Syntax, die „password_hash()“ lautet.

Dies ist das Beispiel für die Verwendung der Hashing-Technik „bcrypt“.

Code:

<?php
$str1 = 'Password';
$options1 = [
'cost1' => 10,
'salt1' => '$P27r06o9!nasda57b2M22'
];
echo sprintf("The Result of crypt() function on %s is %s\n",
$str1, crypt($str1, $options1['salt1']));
echo "<br>";
echo sprintf("The Result of DEFAULT function on %s is %s\n",
$str1, password_hash($str1, PASSWORD_DEFAULT));
echo "<br>";
echo sprintf("The Result of BCRYPT function on %s is %s\n", $str1,
password_hash($str1, PASSWORD_BCRYPT, $options1));
echo "<br>";
?>

Ausgabe:

PHP-Verschlüsselung

2. Verschlüsselung mit geheimem Schlüssel

Die geheime Schlüsselverschlüsselung von PHP verwendet normalerweise einen einzigen Schlüssel sowohl für die Verschlüsselung als auch für die Entschlüsselung von Daten. Sie wird auch als symmetrische Verschlüsselung bezeichnet. Wenn Sie dazu eine alte Version der PHP-Programmiersprache verwenden, installieren Sie Natrium der PHP-Programmiersprache über PECL.

Zuerst benötigen Sie den Verschlüsselungsschlüssel, der tatsächlich allein durch die Verwendung des Funktionscodes random_bytes() generiert wird. Normalerweise müssen Sie dies jedoch nur einmal tun und speichern es einfach als Umgebungsvariable. Das ist der Schlüssel, den wir geheim halten müssen. Wenn der geheime Schlüssel bekannt ist, wird auch die Verschlüsselung kompromittiert.

$secret_key = random_bytes (SODIUM_CRYPTO_SECRETBOX_KEYBYTES);

Um den Wert, der an die Funktion „sodium_crypto_secretbox()“ übergeben wird, mit unserem Schlüssel/geheimen Schlüssel und $nonce zu verschlüsseln. Dann wird die Nonce-Variable mit der Funktion random_bytes() generiert, und zwar nur deshalb, weil dieselbe/ähnliche Nonce niemals verwendet werden kann.

$nonce = random_bytes(SODIUM_CRYPTO_NONCEBYTES);
$ciphertext = sodium_crypto_secretbox(‘This is secret key!!!’, $nonce, $secret_key);

Dies wird das Problem darstellen, da wir diese Nonce benötigen, die den Wert später/nachher entschlüsseln wird. Aber NONCE/NONCES hat keinen Schlüssel, der geheim gehalten werden muss, sodass wir ihn einfach als $ciphertext voranstellen können und dann ist die Funktion base64_encode() der Wert, der geschieht, bevor er in der eigentlichen Datenbank gespeichert wird.

$encoded1 = base64_encode($nonce . $ciphertext);
Var_dump($encoded1);

Die obige Syntax dient nur der Verschlüsselung des Werts. Um den codierten Wert zu dekodieren/entschlüsseln, verwenden Sie die folgende Syntax.

$decoded1 = base64_decode($encoded1);

Die Länge der Nonce-Variablen oder -Funktion wird mit der Funktion mb_substr() unmittelbar vor der Entschlüsselung des Werts extrahiert.

Dies ist das Beispiel für die Implementierung der Funktion random_bytes(), um die Verschlüsselung mit geheimen Schlüsseln zu verstehen. Hier wird die Länge des Zufallsstrings mit Hilfe von binärem Hex konvertiert, um die Zufallsbytes in einem String zu sichern.

Code:

<?php
$length1 = random_bytes('3');
var_dump(bin2hex($length1));
?>

Output:

PHP-Verschlüsselung

3. Envelope Encryption

We all know that our data is vulnerable if our secret key is known/compromised. Just consider that a malicious user/attacker got access to the server point which is actually hosting our application/other. In this situation, attacker most of the times gets/discovers out the secret key which should be kept as secret. If it is discovered then our data may be in danger of exposing to the malicious user/attacker.

We can use Cloud KMS service which is actually provided by the Google Cloud Key Management Service. It provided a wide variety of so many useful features. It includes automatic key rotation and also the delayed key destruction capability.

Before sending plaintext to the CLOUD KMS, generate a unique encryption key each and every time when we actually write the data to the database. This key is called DEK (Data Encryption Key) which is actually used in encrypting the data. DEK which is sent to the Google Cloud KMS will be encrypted and then it will return the KEK (key encryption key). At last, KEK will be stored side by side in the actual database point which is next to the encrypted data and then the DEK will be destroyed.

Check out the data encryption and decryption as below:

Encryption process
  • It will generate unique DEK – Data Encryption Key
  • Using the SKE (Secret Key Encryption) the data will be encrypted
  • Now the DEK – Data Encryption Key will be sent to the Cloud KMS for encryption purpose which actually returns the KEY – Key Encryption Key.
  • Then the encrypted data will be stored and KEK side by side
  • Then the destruction of the DEK will be done
Decryption Process
  • Now at first, from the database encrypted and KEK (Key Encrypted Key) will be retrieved.
  • Then send KEK for the Cloud KMD for decryption which actually returns the DEK – Data Encryption Key
  • Now the DEK – Data Encryption Key will be used to decrypt the encrypted data.
  • Now DEK – Data Encryption Key will be destroyed.

Conclusion

I hope you learned what is the definition of PHP Encryption and along with the various types of PHP Encryption methods along with the examples by mentioning their brief description. An example is shown here for envelope encryption because it is cloud-based encryption.

Das obige ist der detaillierte Inhalt vonPHP-Verschlüsselung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP-AnmerkungenNächster Artikel:PHP-Anmerkungen