Heim > Artikel > Backend-Entwicklung > Interner PHP-Verschlüsselungs- und Entschlüsselungsalgorithmus
Packen Sie sie in eine Datei und nennen Sie sie fun.php
<?php function passport_encrypt($txt, $key) { srand((double)microtime() * 1000000); $encrypt_key = md5(rand(0, 32000)); $ctr = 0; $tmp = ''; for($i = 0;$i < strlen($txt); $i++) { $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr; $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]); } return base64_encode(passport_key($tmp, $key)); } function passport_decrypt($txt, $key) { $txt = passport_key(base64_decode($txt), $key); $tmp = ''; for($i = 0;$i < strlen($txt); $i++) { $md5 = $txt[$i]; $tmp .= $txt[++$i] ^ $md5; } return $tmp; } function passport_key($txt, $encrypt_key) { $encrypt_key = md5($encrypt_key); $ctr = 0; $tmp = ''; for($i = 0; $i < strlen($txt); $i++) { $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr; $tmp .= $txt[$i] ^ $encrypt_key[$ctr++]; } return $tmp; } ?>
Im Folgenden finden Sie einige Beispiele, um das Verständnis dieser drei Ver- und Entschlüsselungsfunktionen zu vertiefen
//string.php <?php include “fun.php”; $txt = “This is a test”; $key = “testkey”; $encrypt = passport_encrypt($txt,$key); $decrypt = passport_decrypt($encrypt,$key); echo $txt.”<br><hr>”; echo $encrypt.”<br><hr>”; echo $decrypt.”<br><hr>”; ?> //array.php <?php include “fun.php”; $array = array( "a" => "1", "b" => "2", "c" => "3", "d" => "4" ); //serialize产生一个可存储的值,返回一个字符串,unserialize还原 $txt = serialize($array); $key = “testkey”; $encrypt = passport_encrypt($txt,$key); $decrypt = passport_decrypt($encrypt,$key); $decryptArray = unserialize($decrypt); echo $txt.”<br><hr>”; echo $encrypt.”<br><hr>”; echo $decrypt.”<br><hr>”; echo $decryptArray.”<br><hr>”; ?>
Der Schlüssel Punkte: Wenn Sie zu einer anderen Website springen möchten, aber sicherstellen möchten, dass Ihre Sitzung korrekt ist, müssen Sie die Sitzung verarbeiten. Es scheint, dass ein Unternehmen über eine Website und ein Forum verfügt und beide Orte über eine Registrierung und Anmeldung verfügen Ich möchte nicht, dass die Sitzung des Benutzers ungültig wird, wenn er nach der Anmeldung auf der Startseite zum Forum springt, d.
Die Webseiten sind alle zustandslos. Wenn Sie die Sitzung auf einer neuen Webseite weiterverwenden möchten, müssen Sie die Sitzung von einem Ort an einen anderen verschieben. Ich kann es aufrufen, indem ich die URL übergebe. Es gibt eine Variable namens $_SESSION, die registriert werden muss. Dann können Sie Folgendes schreiben:
//login.php <?php session_start(); include “fun.php”; $_SESSION[“userid”]; $_SESSION[“username”]; $_SESSION[“userpwd”]; header("Location: http://$domain/process.php?s=".urlencode(passport_encrypt(serialize($_SESSION),"sessionkey"))); ?>
Für die Verarbeitung verwenden Sie zuerst
//process.php <?php session_start(); include “fun.php”; $_SESSION=unserialize(passport_decrypt($_GET["s"],"sessionkey")); header("Location: http://$domain/index.php"); ?>
Diese Methode bringt auch Sicherheitsprobleme mit sich, wenn Ihre URL-Adresse während des Adressübertragungsprozesses an Dritte weitergegeben wird. Es kann zwar sein, dass sie den Inhalt der URL nicht entschlüsseln können, aber andere Sie können diese URL-Adresse auch direkt verwenden, um sich bei einigen Ihrer persönlichen Konten, E-Mail-Konten und sogar Bankkonten anzumelden (natürlich werden nur wenige Leute so schreiben, ich bin eine Ausnahme, haha). Aber in der Tat klingt es beängstigend , Sie können die Seite übertragen, um die Sitzung abzubrechen
Das Folgende ist die erweiterte Version von process.php
<?php session_start(); include_once "fun.php"; $_SESSION=unserialize(passport_decrypt($_GET["s"],"sessionkey")); if((time()-$_SESSION["TIME"])>30){ header("Location: http://$domain/ login.php"); unset($_SESSION["USERNAME"]); unset($_SESSION["PASSWORD"]); } else header("Location: http://$domain/ index.php"); ?>
$ _SESSION["TIME"] = time();
Der Hauptgrund für die Einstellung besteht darin, die Zeit auf beiden Seiten zu ermitteln. Sie können es springen lassen. Die Anmeldeseite von login.php ist für Kunden mit langsamer Netzwerkgeschwindigkeit peinlich, verhindert aber auch, dass es peinlich wird, wenn jemand diese URL erhält und sich die Person nicht innerhalb von 30 Sekunden anmeldet Der Benutzer muss sich nach einer Zeitüberschreitung erneut anmelden. $_SESSION["USERNAME"] und $_SESSION["PASSWORD"] sind der Benutzername und das Passwort, die Benutzer beim Anmelden eingeben müssen. Der Grund dafür Das Abbrechen dieser beiden Sitzungen liegt daran, dass Ihre URL von jemandem abgerufen wurde, obwohl diese Person innerhalb von mehr als 30 Sekunden zur Seite login.php springt, solange das URL-Suffix login.php geändert wird zu index.php, wird er sich trotzdem erfolgreich anmelden.