Heim  >  Artikel  >  Backend-Entwicklung  >  So implementieren Sie die Erkennung von Bestätigungscodes in PHP

So implementieren Sie die Erkennung von Bestätigungscodes in PHP

藏色散人
藏色散人Original
2020-09-01 09:14:163512Durchsuche

So implementieren Sie die Bestätigungscode-Erkennung in PHP: Binarisieren Sie zunächst das Bild und speichern Sie den Wert in einem zweidimensionalen Array. Ermitteln Sie dann die Position jeder Zahl im zweidimensionalen Array , und verketten Sie die Zahlen. Vergleichen und identifizieren Sie schließlich die Zeichenfolge mit der Zeichenfolge jeder Schriftart.

So implementieren Sie die Erkennung von Bestätigungscodes in PHP

Empfohlen: „PHP-Video-Tutorial

Aber die ursprüngliche Einführung ist relativ einfach und erwähnt nicht den spezifischen Implementierungsprozess des Algorithmus. Der detaillierte Prozess wird übertragen von:

http://www.poboke.com/study/php-verification-code-identification-primary.html

Dieser Artikel verwendet daher ein praktisches Beispiel, um den Prozess der PHP-Identifizierung zu demonstrieren Geben Sie den Bestätigungscode ein und senden Sie ihn ab. Der Bestätigungscode wird zur Überprüfung an den Server gesendet.

Teil Eins: Erkennung von Verifizierungscodes

Kürzlich wurden einige Durchbrüche in der Kenntnis von Verifizierungscodes recherchiert und aufgezeichnet. Einerseits ist es eine Zusammenfassung des Wissens, das ich in den letzten Tagen gelernt habe, um mir selbst das Verständnis zu erleichtern. Andererseits hoffe ich, dass es für technische Studenten, die diesen Aspekt studieren, hilfreich sein wird Ich hoffe, die Aufmerksamkeit von Website-Administratoren zu erregen und bei der Bereitstellung von Bestätigungscodes mehr Rücksicht zu nehmen. Da ich gerade erst mit diesem Aspekt des Wissens in Berührung gekommen bin, ist mein Verständnis relativ einfach, sodass Fehler unvermeidlich sind. Fühlen Sie sich frei, Kommentare abzugeben.

Die Rolle des Verifizierungscodes: Er verhindert effektiv, dass ein Hacker kontinuierlich versucht, sich bei einem bestimmten registrierten Benutzer anzumelden, indem er ein bestimmtes Programm zur Brute-Force-Methode verwendet. Tatsächlich verhindern moderne Verifizierungscodes im Allgemeinen, dass Maschinen sich stapelweise registrieren und dass Maschinen keine Antworten stapelweise veröffentlichen. Derzeit verwenden viele Websites die Verifizierungscode-Technologie, um zu verhindern, dass Benutzer Roboter zur automatischen Registrierung und Anmeldung verwenden und Spam versenden.

Der sogenannte Verifizierungscode besteht darin, ein Bild aus einer Folge zufällig generierter Zahlen oder Symbole zu generieren, wobei dem Bild einige Interferenzpixel hinzugefügt werden (um OCR zu verhindern). Der Benutzer kann die Verifizierungscodeinformationen mit bloßem Auge erkennen. Geben Sie das Formular ein und senden Sie es zur Überprüfung an die Website. Eine Funktion kann erst nach erfolgreicher Überprüfung verwendet werden.

Unser häufigster Verifizierungscode:
1, vier Ziffern, eine zufällige einstellige Zeichenfolge, der originellste Verifizierungscode, der Verifizierungseffekt ist nahezu Null.
2. Zufälliger digitaler Bildverifizierungscode. Die Zeichen auf dem Bild sind recht regelmäßig, einige haben möglicherweise zufälliges Interferon hinzugefügt und einige haben zufällige Zeichenfarben, sodass der Überprüfungseffekt besser ist als beim vorherigen. Menschen ohne Grundkenntnisse in Grafik und Bildsprache können es nicht knacken!
3. Zufallszahlen in verschiedenen Bildformaten + zufällige englische Großbuchstaben + zufällige Interferenzpixel + zufällige Positionen.
4. Chinesische Zeichen sind die neuesten Bestätigungscodes für die Registrierung. Sie werden zufällig generiert, was die Eingabe erschwert und das Benutzererlebnis beeinträchtigt.

Der Einfachheit halber ist das Hauptziel unserer Erklärung dieses Mal der erste Typ. Schauen wir uns zunächst einige gängige Verifizierungscodebilder im Internet an.
Diese vier Stile können grundsätzlich die in 2 genannten Arten von Bestätigungscodes darstellen. Auf den ersten Blick ist das erste Bild am einfachsten zu knacken, das zweite das zweite, das dritte schwieriger und das vierte am schwierigsten.
Wie ist die reale Situation? Tatsächlich sind diese drei Arten von Bildern gleichermaßen schwer zu knacken.

Das erste Bild ist das einfachste. Der Hintergrund und die Zahlen des Bildes verwenden dieselbe Farbe, die Zeichen sind regelmäßig und die Zeichen befinden sich an derselben Position. In diesem Artikel wird diese Art von Bestätigungscode als Beispiel verwendet. Die Schüler können selbst andere Bilder erstellen.
Das zweite Bild scheint nicht einfach zu sein. Wenn Sie es sorgfältig studieren, werden Sie feststellen, dass die Verifizierungszeichen unabhängig von der Änderung der Hintergrundfarbe und der gleichen Farbe sehr einfach zu entfernen sind Interferon, solange alle nicht charakteristischen Pigmente eliminiert werden.
Das dritte Bild scheint komplizierter zu sein. Zusätzlich zu der oben erwähnten Änderung der Hintergrundfarbe und des Interferons ändert sich auch die Farbe der Verifizierungszeichen, und die Farben jedes Zeichens sind ebenfalls unterschiedlich.
Das vierte Bild fügt zusätzlich zu den im dritten Bild erwähnten Merkmalen zwei gerade Linien zum Text hinzu, um die Rate zu beeinträchtigen. Es scheint schwierig, aber tatsächlich ist es leicht, es zu entfernen.

Im Folgenden wird Wanwangs „Allgemeine URL-Abfrage“ verwendet, um den Prozess zur Identifizierung des Bestätigungscodes zu veranschaulichen.
Öffnen Sie Wanwang: http://www.net.cn. In der rechten Seitenleiste der Website befindet sich eine „Allgemeine URL-Abfrage“:

Es ist ersichtlich, dass dies der erste Bestätigungscode ist Vom menschlichen Auge erkannt Die Zahlen werden ausgegeben, daher ist der Farbunterschied zwischen der Zahlenfarbe und der Hintergrundfarbe des Verifizierungscodebilds relativ groß, sodass auch der RBG-Wert sehr unterschiedlich ist. Die Zahl und der Hintergrund können durch Beurteilung unterschieden werden RGB-Wert jedes Pixels.

Die Bestätigungscode-Erkennung ist im Allgemeinen in die folgenden Schritte unterteilt:

1. Nehmen Sie die Schriftart heraus.
Erkennen Sie den Bestätigungscode, da es sich nicht um eine professionelle OCR-Erkennung handelt sind unterschiedlich, daher besteht eine gängige Methode letztendlich darin, eine Feature-Code-Bibliothek für diesen Bestätigungscode zu erstellen. Beim Entfernen der Schriftarten müssen wir noch ein paar Bilder herunterladen, damit diese Bilder alle Zeichen enthalten. Die Bilder hier enthalten nur Zahlen, wir müssen also nur Bilder von Zahlen einschließlich 0-9 sammeln.

1. Aktualisieren Sie den Bestätigungscode mehrmals und speichern Sie die Bilder des Bestätigungscodes. Sammeln Sie alle Bilder von 0-9.

2. Öffnen Sie das Bild mit einer Bildbearbeitungssoftware. Drücken Sie Strg+8, um die Ansicht des Bildes 8-mal zu vergrößern.

Sie können feststellen, dass die Breite jeder Zahl 6 Pixel beträgt, die Höhe 10 Pixel beträgt, der Abstand zwischen den Zahlen 4 Pixel beträgt, die erste Zahl links um 2 Pixel und oben um 0 Pixel versetzt ist. Diese Nummern werden später verwendet.

3. Schneiden Sie jede Zahl aus und speichern Sie sie als Bild, die Größe beträgt 6*10.

2. Bildbinarisierung
Bei der Binarisierung wird jedes Pixel der Verifizierungsnummer im Bild als Zahl 1 und andere Teile als 0 dargestellt. Binarisieren Sie das zu erkennende Bild und speichern Sie die Daten in einem zweidimensionalen Array, um das Bildmerkmal-Array zu erhalten.

1. Unterscheiden Sie zunächst die Zahlen von der Hintergrundfarbe und der Interferenzfarbe und beobachten Sie das Farbmuster mit der Bildschirmfarbauswahl.

Wir können eine Schlussfolgerung ziehen: Die R-, G- und B-Werte der Hintergrundfarbe sind alle größer als 200, während einer der R-, G- und B-Werte der digitalen Farbe möglicherweise kleiner als 200 ist 200, sodass es leicht unterschieden werden kann.

2. Der folgende PHP-Code dient nur zur Veranschaulichung des zweidimensionalen Arrays. Um die Zahlen visuell zu sehen, werden 1 und 0 in 0 und - geändert:



1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21


echo '<br><img src="v1.jpg"><br><br>';

 

getHec("v1.jpg");

 

function getHec($imagePath) {

    $res = imagecreatefromjpeg($imagePath);

    $size = getimagesize($imagePath);

    

    für ($i = 0; $ i &lt; $Größe[1]; ++$i) {

        für ($j = 0; $j &lt; $Größe[0]; ++$j) {

            $j, $i );

             $rgb);

            lt; 200 || $rgbarray['green']&lt;200 || $rgbarray[' blau'] & lt; 200) {

                echo "0";

            {                 echo

"-";

            }

        }

        echo "<br>";

    }

}

Die Ergebnisse sind im Bild unten dargestellt:

Wenn die Hintergrundfarbe des Bildes komplexer ist, ist die Verarbeitungsmethode dieselbe. Sie können den kritischen Wert zur Unterscheidung immer selbst ermitteln.

3. Binarisierung digitaler Schriftarten
Berechnen Sie die Binärdaten jeder digitalen Schriftart, zeichnen Sie diese Daten auf und verwenden Sie sie als Schlüssel.

1. Binarisieren Sie das digitale Schriftbild 0-9, nehmen Sie nacheinander die pixelähnliche Farbe des Bildes heraus, ermitteln Sie dann die R-, G- und B-Werte jedes Pixels und treffen Sie dann eine Beurteilung. Der Code lautet wie folgt:



1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21


für($i=0;$i &lt; 10;$i++){

    echo"'$i'=>'";

    echogetHec("$i.jpg")."',<br>";

}

 

functiongetHec($imagePath){

    $ res=Bild aus JPEG erstellen( $imagePath);

    $size=getimagesize($imagePath);

    

    für($i=0;$ i&lt; $Größe[1];++$i){

        für($j=0;$ j&lt; $Größe[0];++$j){

            $j,$i );

            $rgb);

            if($rgbarray['red']& lt;200|| $rgbarray['grün']&lt;200||$rgbarray['blue'] &lt; 200){

                echo"1";

                            }

        }

    }

}

Ausgabeergebnis:



1

2

3

4

5

6

7

8

9

10


'0'=&gt; '011110100001100001100001100001100001100001100001100001011110',

'1'=&gt;'00100011100000100000100000100000100000100000100000100011 1110',

'2'=&gt; '011110100001100001000001000010000100001000010000110011111111',

'3'=&gt;'01111010000110000100001000110000001000000110000110000101 1110',

'4'=&gt; '000100000100001100010100100100100100111111000100001100001111',

'5'=&gt;'11111110000010000010111011000100000100000110000110000101 1110',

'6'=&gt; '001110010001100000100000101110110001100001100001100001011110',

'7'=&gt;'11111110001010001000010000010000100000100000100000100000 1000',

'8'=&gt; '011110100001100001100001011110010010100001100001100001011110',

'9'=&gt;'01110010001010000110000110001101110100000100000110001001. 1100',

Vier Kontrollbeispiel
Fügen Sie den Bildfunktionscode in Schritt 2 ein und Vergleichen Sie die Schriftarten des Bestätigungscodes in Schritt 3, um die Zahlen auf dem Bestätigungsbild zu erhalten.

Algorithmusprozess (Code siehe Anhang):
1. Speichern Sie den binarisierten Wert des Bildes in einem zweidimensionalen Array.
2. Ermitteln Sie durch Schleifen die Position jeder Zahl, indem Sie die Breite, Höhe, das Intervall, den linken Versatz und den oberen Versatz der zuvor erhaltenen Zahl verwenden.
Zum Beispiel: Linksversatz der i-ten Zahl = (Zahlenbreite + Intervall) * i + Linksversatz. (w h Eine Zeichenfolge mit ähnlichen Glyphen.
4. Vergleichen Sie die Zeichenfolge mit der Zeichenfolge jeder Schriftart, um die Ähnlichkeit zu ermitteln. Nehmen Sie die Zahl, die der höchsten Ähnlichkeit entspricht, oder schließen Sie daraus, dass es sich um eine bestimmte Zahl handelt, wenn die Ähnlichkeit mehr als 95 % erreicht.
5. Die Erkennungsergebnisse sind wie folgt:

Mit der aktuellen Methode kann die Erkennung des Verifizierungscodes grundsätzlich 100 % betragen.

Durch die oben genannten Schritte haben Sie vielleicht gesagt, dass Sie nicht herausgefunden haben, wie man Interferon entfernt! Tatsächlich ist die Methode zur Entfernung von Interferon sehr einfach. Ein wichtiges Merkmal von Interferon besteht darin, dass es den Anzeigeeffekt des Verifizierungscodes nicht beeinflussen kann. Daher kann sein RGB bei der Herstellung von Interferon niedriger oder höher als ein bestimmter Wert sein, z In dem Beispiel, das ich im Bild gegeben habe, beträgt der RGB-Wert von Interferon nicht weniger als 200, sodass wir Interferon problemlos entfernen können.

Quellcode-Download: http://yunpan.cn/cmJCkEnyGij3t Zugangspasswort d2ba

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Erkennung von Bestätigungscodes in PHP. 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:Was tun, wenn php5.dll fehlt?Nächster Artikel:Was tun, wenn php5.dll fehlt?