In diesem Artikel wird ein einfacher und benutzerfreundlicher Verschlüsselungs-/Entschlüsselungsalgorithmus vorgestellt: die Verwendung der Exklusiv-ODER-Operation (XOR). Das Prinzip dieses Algorithmus ist einfach und zielt darauf ab, den Lesern einen intuitiveren Eindruck von der Verschlüsselung/Entschlüsselung von Informationen zu vermitteln.
Prinzip des XOR-Algorithmus
Aus Sicht der Hauptverschlüsselungsmethode ist die Transpositionsmethode zu einfach, insbesondere wenn die Datenmenge klein ist, der Klartext leicht aus dem Chiffretext zu erraten ist und die Substitutionsmethode effektiv und einfach ist Algorithmus.
Aufgrund der Eigenschaften verschiedener Substitutionsoperationen eignet sich die XOR-Operation am besten für einfache Verschlüsselungs- und Entschlüsselungsoperationen. Das Prinzip dieser Methode lautet: Wenn eine Zahl A und eine andere Zahl B XOR-verknüpft werden, wird eine weitere Zahl C generiert Eine XOR-Operation für C und B wird durchgeführt, und C wird in A wiederhergestellt.
Im Vergleich zu anderen einfachen Verschlüsselungsalgorithmen bietet der XOR-Algorithmus folgende Vorteile.
(1) Der Algorithmus ist einfach und kann leicht in Hochsprachen implementiert werden.
(2) Es ist schnell und kann jederzeit und überall verwendet werden.
(3) Es gilt für jedes Zeichen. Im Gegensatz zu einigen einfachen Verschlüsselungsalgorithmen, die nur für westliche Zeichen gültig sind, können chinesische Zeichen nach der Verschlüsselung und Entschlüsselung nicht auf die ursprünglichen Zeichen zurückgesetzt werden.
Implementierung des XOR-Algorithmus
Im vorherigen Teil wurde das Prinzip der Verwendung der XOR-Operation zur Verschlüsselung/Entschlüsselung vorgestellt. In diesem Abschnitt wird sie zur Verschlüsselung der Anmeldeinformationen des Benutzers verwendet. Gemäß dem im vorherigen Abschnitt vorgestellten Prinzip des XOR-Verschlüsselungsalgorithmus ist es nicht schwierig, die folgenden Verschlüsselungs- und Entschlüsselungsfunktionen zu schreiben. Verschlüsselungsalgorithmen werden zuerst aufgeführt.
1 <!--encrypy_xor: Eine Verschlüsselungsfunktion, die einfach eine XOR-Operation verwendet---------------------->
2 <?php
3 //Verschlüsselungsfunktion
4 Funktion myEncrypt($string, $key)
5 {
6 for($i=0; $i<STRLEN($STRING); p $i++)<>
7 {
8 for($j=0; $j<STRLEN($KEY); p $j++)<>
9 {
10 $string[$i] = $string[$i]^$key[$j];
11 }
12}
13 return $string;
14}
Zeile 4 definiert die Verschlüsselungsfunktion myEncrypt(). Der Eingabeparameter $string ist Klartext und $key ist der Schlüssel; die Ausgabe ist der mit $key als Schlüssel und unter Verwendung des XOR-Verschlüsselungsalgorithmus generierte Chiffretext.
Die äußere for-Schleife in den Zeilen 6 bis 12 durchläuft jedes Zeichen der Klartextzeichenfolge, während die innere for-Schleife (Zeilen 8 bis 11) jedes Zeichen im Klartext durchläuft und bei jedem Bit der ODER-Operation eine Ausnahme ausführt. Der Grundsatz wurde im vorherigen Abschnitt eingeführt und wird nicht wiederholt.
Auch hier kann ähnlich wie bei der Verschlüsselungsfunktion die folgende Entschlüsselungsfunktion geschrieben werden.
1 //Entschlüsselungsfunktion
2 Funktion myDecrypt($string, $key)
3 {
4 for($i=0; $i<STRLEN($STRING); p $i++)<>
5 {
6 for($j=0; $j<STRLEN($KEY); p $j++)<>
7 {
8 $string[$i] = $key[$j]^$string[$i];
9}
10}
11 return $string;
12}
13?>
Zeile 4 definiert die Entschlüsselungsfunktion myDecrypt(), der Eingabeparameter $string ist der Chiffretext und $key ist der Schlüssel; die Ausgabe ist der Klartext, der mit $key als Schlüssel und unter Verwendung des XOR-Entschlüsselungsalgorithmus generiert wird.
Nachfolgend wird anhand eines Anwendungsbeispiels die Funktion der Verschlüsselungsfunktion näher erläutert.
1 //Beispiel
2 $my_password="Stuhl";
3 echo „my_password = $my_password“;
4 $my_key="1234567890";
5 $my_password_en=myEncrypt($my_password,$my_key);
6 echo „my_password_en = $my_password_en“;
7 $my_password_de=myDecrypt($my_password_en,$my_key);
8 echo „my_password_de = $my_password_de“;
Zeile 3 definiert zunächst einen Klartext $my_password und definiert dann den Schlüssel $my_key in Zeile 4.
Die Zeilen 5 und 6 rufen jeweils die Verschlüsselungsfunktion auf, um Chiffretext zu generieren und auszugeben. Der Chiffretext wird wiederum in den Zeilen 7 und 8 entschlüsselt.
Die Ergebnisse der Ausführung des obigen Beispiels sind wie folgt.
my_password = Stuhl
my_password_en = RYPXC
my_password_de = Stuhl
Implementierung der Identitätsauthentifizierung mithilfe des XOR-Algorithmus
In den beiden vorherigen Teilen wurden das Prinzip und die Implementierung der Informationsverschlüsselung/-entschlüsselung mithilfe der XOR-Operation vorgestellt. Als Nächstes wird diese Methode zum Verschlüsseln des Anmeldekennworts des Benutzers verwendet. In diesem Beispiel möchte das System zum Schutz des Benutzerkennworts die folgenden Ziele erreichen.
·Bei der Registrierung muss der Benutzer das Benutzerpasswortformular ausfüllen.
·Außer dem Benutzer selbst kann niemand sonst an seine Passwortinformationen gelangen, auch nicht Systemdesigner und Datenbankadministratoren.
·Das System kann die Legitimität des Benutzers anhand des vom Benutzer eingegebenen Passworts überprüfen.
Um den oben genannten Zweck zu erreichen, können Sie bei Verwendung des XOR-Algorithmus den Benutzernamen als Klartext und den Schlüssel als benutzerdefiniertes Kennwort auswählen und dann den verschlüsselten Benutzernamen in der Datenbank speichern.
Wenn sich ein Benutzer anmeldet, gibt es außerdem die folgenden zwei Möglichkeiten, legitime Benutzer zu überprüfen.
(1) Verschlüsseln Sie basierend auf den übermittelten Informationen zu Benutzername (Klartext) und Passwort (Schlüssel) erneut und vergleichen Sie die verschlüsselten Informationen mit den in der Datenbank gespeicherten Passwortinformationen. Wenn sie gleich sind, ist der Benutzer legal , der Benutzer ist illegal.
(2) Entschlüsseln Sie basierend auf den in der Datenbank gespeicherten Passwortinformationen (Klartext) und den vom Benutzer eingegebenen Passwortinformationen (Schlüssel) und vergleichen Sie die verschlüsselten Informationen mit dem vom Benutzer übermittelten Benutzernamen ist legitim, andernfalls für illegale Benutzer.
Beide Methoden können den dritten Zweck erreichen. In diesem Beispiel wird die zweite Methode verwendet. Der Implementierungscode dieses Beispiels kann basierend auf der Implementierung von Abschnitt 18.4.1 „Benutzeranmeldung“ und Abschnitt 18.4.2 „Benutzeranmeldung“ implementiert werden. Die Implementierungsreferenz von „. „Benutzer prüfen“ lautet wie folgt.
1 <?php
2 session_start(); //Laden Sie die Sitzungsbibliothek, die in der ersten Zeile platziert werden muss
3 $user_name=$_POST["user_name"];
4 session_register("user_name"); //Registrieren Sie die Variable $user_name. Beachten Sie, dass es kein $-Symbol gibt
5
6 require_once("sys_conf.inc"); //Systemkonfigurationsdatei, einschließlich Datenbankkonfigurationsinformationen
7 require_once("encrypy_xor.php"); //Enthält die XOR-Verschlüsselungsfunktionsdatei
8
9 //Mit der Datenbank verbinden
10 $link_id=mysql_connect($DBHOST,$DBUSER,$DBPWD);
11 mysql_select_db($DBNAME); //Datenbank my_chat auswählen
12
13 //Abfrage, ob angemeldete Benutzerinformationen vorhanden sind
14 $str="wählen Sie Namen und Passwort vom Benutzer aus, wobei Name ='$Benutzername'";
15 $result=mysql_query($str,$link_id); //Abfrage ausführen
16 @$rows=mysql_num_rows($result); //Die Anzahl der aus den Abfrageergebnissen erhaltenen Datensätze
17 $user_name=$_SESSION["user_name"];
18 $password=$_POST["password"];
19 $password_en=myEncrypt($user_name,$password); //Benutzerinformationen verschlüsseln
20
21 //Für alte Benutzer
22 if($rows!=0)
dreiundzwanzig {
24 list($name,$pwd)=mysql_fetch_row($result);
25 $password_de=myDecrypt($pwd,$password); //Benutzerinformationen entschlüsseln
26
27 //Wenn das Passwort korrekt eingegeben wurde
28 if($user_name==$password_de)
29 {
30 $str="update user set is_online =1 where name ='$user_name' and password='$password_en'";
31 $result=mysql_query($str, $link_id); //Abfrage ausführen
32 require("main.php"); //Gehe zur Chat-Seite
33}
34 //Fehler bei der Passworteingabe
35 sonst
36 {
37 require("relogin.php");
38 }
39 }
40 //Für neue Benutzer schreiben Sie ihre Informationen in die Datenbank
41 sonst
42 {
43 $str="insert into user (name,password,is_online) Values('$user_name', '$password_en',1)";
44 $result=mysql_query($str, $link_id); //Abfrage ausführen
45 require("main.php"); //Gehe zur Chat-Seite
46 }
47 //Schließen Sie die Datenbank
48 mysql_close($link_id);
49 ?>
Zeile 7 stellt die Verschlüsselungsfunktionsdatei encrypy_xor.php vor, einschließlich der beiden im vorherigen Abschnitt eingeführten Funktionen.
In Zeile 19 wird der verschlüsselte Passwortwert mithilfe des vom Benutzer übermittelten Benutzernamens und Passworts abgerufen. Für neue Benutzer wird dieser verschlüsselte Wert in Zeile 44 in der Datenbank gespeichert.
Rufen Sie für alte Benutzer außerdem in Zeile 24 den Benutzernamen und die verschlüsselten Kennwortinformationen in der Datenbank ab, verwenden Sie diese beiden Werte zum Entschlüsseln in Zeile 25 und vergleichen Sie dann den entschlüsselten Wert mit den von übermittelten Benutzernameninformationen Benutzer in Zeile 28, um die Legitimität des Benutzers zu überprüfen.
Im vorherigen Teil derautomatischen Generierung von Schlüsseln
wurde erläutert, wie der XOR-Verschlüsselungsalgorithmus zum Verschlüsseln von Benutzerinformationen verwendet wird. Die vom Benutzer eingegebenen Kennwortinformationen werden tatsächlich zum Schlüssel im Verschlüsselungsalgorithmus und der Benutzername wird als Klartext verwendet sehr Es vervollständigt die Funktion gut, aber logischerweise scheint diese Methode etwas unvernünftig zu sein.
In diesem Artikel wird eine Technologie vorgestellt, die automatisch Schlüssel generiert. Sie können die automatisch generierten Schlüssel verwenden, um den Klartext des vom Benutzer übermittelten Kennworts zu verschlüsseln, wodurch die Logik sinnvoller wird.
In diesem Beispiel wird davon ausgegangen, dass der generierte Schlüssel 512 Bit lang ist. Der Code lautet wie folgt.
1 <!--keygen.php: Schlüssel automatisch generieren----------------------------------->
2 <?php
3
4 //Automatisch einen Schlüssel mit der Länge $len generieren
5 Funktion generic_key($len)
6 {
7 $untere Grenze = 35;
8 $upperbound = 96;
9 $strMyKey = "";
10
11 for($i=1;$i<=$len;$i++)
12 {
13 $rnd=rand(0,100); //Zufallszahlen generieren
14 $k = (($upperbound - $lowerbound) + 1) * $rnd + $lowerbound;
15 $strMyKey=$strMyKey.$k;
16}
17 return $strMyKey;
18}
19
20 //Schreiben Sie den Schlüssel in die Datei $file_name
21 Funktion write_key($key,$file_name)
zweiundzwanzig {
23 $filename="C:key.txt";
24 $key=generate_key($key,512);
25
26 //Öffnen Sie „$filename“ im Add-Modus. Der Dateizeiger befindet sich am Ende der Datei
27 if(!$handle=fopen($filename,'w'))
28 {
29 print „Datei $Dateiname kann nicht geöffnet werden“;
30 Ausgang;
31}
32
33 //Schreibe $key in die von uns geöffnete Datei.
34 if(!fwrite($handle,$key))
35 {
36 print „In die Datei $filename kann nicht geschrieben werden“;
37 Ausgang;
38 }
39 fclose($handle);
40}
41
42 //Lesen Sie den Schlüssel in der Schlüsseldatei
43 Funktion get_key($file_name)
44 {
45 //Datei öffnen
46 $fp = fopen ($file_name, "r");
47 $result="";
48 //Zeile für Zeile lesen
49 while (!feof($fp))
50 {
51 $buffer = fgets($fp, 4096);
52 $result=$result.$buffer;
53}
54 return $result;
55 }
56
57 ///*
58 $KeyLocation = "C:key.txt"; //Datei zum Speichern des Schlüssels
59 $key="123456";
60 write_key($key,$KeyLocation);
61 echo get_key($KeyLocation);
62 //*/
63 ?>
Der Code enthält 3 Funktionen.
·generate_key($len): generiert automatisch einen Schlüssel mit der Länge $len
·write_key($key,$file_name): schreibt den Schlüssel in die Datei $file_name
·get_key($file_name): liest die Schlüsseldatei $file_name Wenn der Schlüsselwert
Wenn sich der Benutzer zum ersten Mal am System anmeldet, wird der Schlüsselwert automatisch für den Benutzer generiert. Es gibt zwei Möglichkeiten, mit diesem Schlüsselwert umzugehen.
(1) Speichern Sie es in einem bestimmten Feld der Datenbank. Der Nachteil dieser Methode besteht darin, dass die Sicherheit des Schlüssels in der Datenbank nicht gewährleistet werden kann.
(2) Speichern Sie den Schlüssel in der lokalen Datei des Benutzers Der Nachteil dieser Methode besteht jedoch darin, dass sich Benutzer nicht anmelden können, wenn sie andere Computer für den Zugriff auf das System verwenden.
In diesem Beispiel wird Methode 2 verwendet.
Konkret generieren die Zeilen 11 bis 18 des obigen Codes kontinuierlich Schlüssel durch Generierung von Zufallszahlen und erhöhen deren Komplexität durch eine Berechnung. Die Werte für die untere und obere Grenze sind eigentlich der ASCII-Zeichenbereich, den Sie für die Verschlüsselung verwenden möchten. Nachfolgend finden Sie ein Beispiel für eine generierte Schlüsseldatei.
208123915925183361116049369344372701567721435181102718332639307390344373445407
524316475863232913993383189547474747394154915312639841226741894189965623523913
011164730113445201935692839710274127251577929493941487145611337531549110895367
593586318332391170941272701152344371709270125776235313540032267139933835677407
617384135696111239130732949469623520815987524358635491542913374933524334454251
400327015367133759324537171709152357391089524342514685239122673135531363151191
833412771743139654…
最后,需要把密钥保存在服务器上一个安全的地方,然后就可以利用其和诸如XOR这样的加密算法来对用户信息进行加密/解密了。 Die Verwendung dieses Schlüssels im im vorherigen Abschnitt vorgestellten XOR ist sehr einfach und wird nicht im Detail beschrieben. Insgesamt 2 Seiten. 9 7 1 2