Ich wollte das schon immer schreiben, aber nach langer Zeit bekam ich Interesse und beschloss, es aufzunehmen.
Bestätigungscode
Der vollständig automatisierte öffentliche Turing-Test zur Unterscheidung von Computern und Menschen (CAPTCHA), allgemein bekannt als CAPTCHA, ist ein vollständig automatisierter öffentlicher Turing-Test zur Unterscheidung von Computern und Menschen automatisches Programm, das Benutzer von Computern und Menschen unterscheidet. Bei einem CAPTCHA-Test generiert der Computer als Server automatisch eine Frage, die der Benutzer beantworten muss. Diese Frage kann von einem Computer generiert und beurteilt werden, aber nur ein Mensch kann sie beantworten. Da Computer keine CAPTCHA-Fragen beantworten können, kann der Benutzer, der die Fragen beantwortet, als Mensch betrachtet werden.
Einführung in die Enzyklopädie
Einfach ausgedrückt handelt es sich um zufällig generierte Zeichen, die auf einem Bild ausgegeben werden [andere Formen von Drag-and-Drop/SMS-Bestätigungscodes usw. werden hier nicht berücksichtigt].
Häufige Typen
Ideen
Dieser Artikel dient nur zu Demonstrationszwecken, daher der erste Bildbestätigungscode wird als Beispiel zur Erläuterung herangezogen.
Jeder Punkt auf dem Bild hat seinen RGB-Wert, der über den Farbwähler ermittelt werden kann. Mit bloßem Auge ist der Verifizierungscode zu erkennen Das Bild ist ein rein digitaler Volltonhintergrund
Über den Farbwähler ist ersichtlich, dass der RGB-Wert die Hintergrundfarbe der Verifizierung ist Code ist (212.214.204)
Erfolg
Lassen Sie uns die imagecolorsforindex
-Funktion von PHP verwenden, um die RGB-Werte aller Punkte im Bild zu erhalten:
$url = 'http://210.32.33.91:8080/reader/captcha.php'; $im = imagecreatefromgif($url); imagegif($im, '1.gif'); $rgbArray = array(); $res = $im; $size = getimagesize($url); $wid = $size['0']; $hid = $size['1'];for ($i = 0; $i < $hid; ++ $i) { for ($j = 0; $j < $wid; ++ $j) { $rgb = imagecolorat($res, $j, $i); $rgbArray[$i][$j] = imagecolorsforindex($res, $rgb); } }
Die Ergebnisse sind wie folgt folgt:
Vielleicht möchten Sie fragen, wozu das dient? Ändern wir die Art und Weise, wie die Daten angezeigt und ausgegeben werden □
für die Hintergrundfarbe und Ausgabe ■
für den Verifizierungscodebereich, schauen wir uns noch einmal um:
for ($i = 0; $i < $hid; $i ++) { for ($j = 0; $j < $wid; $j ++) { if ($rgbArray[$i][$j]['red'] == 212) { echo '□'; } else { echo '■'; } } echo "<br>"; }
Effekt:
Ist es jetzt ganz klar?
Aber Sie haben vielleicht noch Fragen. Obwohl Sie es sehen können, woher wissen Sie, wie viel es ist?
Lassen Sie es uns unten analysieren:
Jeder Bestätigungscode hat einen direkten Abstand von 4 Leerzeichen, links und rechts einen Abstand von 6/10 Leerzeichen und nach oben und unten einen Abstand von 16/10 Leerzeichen.
Lassen Sie uns diese Störstellen noch einmal entfernen, damit wir klarer sehen können:
Ist es vielleicht immer noch ganz klar, Sie haben das Wie gesagt? Können wir wissen, wie die Zahlen auf dem Bild lauten? sind festgelegt, so dass Sie jeden Bereich 8*10 jedes Wortes 0-9 erhalten können, das aus 0 und 1 besteht.
□
■
Lassen Sie uns jeweils 8 Schnitte machen, entfernen den 4-Gitter-Abstand und eine Schleife, um den 01-Kombinationswert von 0-9 zu erhalten:
$dic = array( '00011000001111000110011011000011110000111100001111000011011001100011110000011000' => 0, '00011000001110000111100000011000000110000001100000011000000110000001100001111110' => 1, '00111100011001101100001100000011000001100000110000011000001100000110000011111111' => 2, '01111100110001100000001100000110000111000000011000000011000000111100011001111100' => 3, '00000110000011100001111000110110011001101100011011111111000001100000011000000110' => 4, '11111110110000001100000011011100111001100000001100000011110000110110011000111100' => 5, '00111100011001101100001011000000110111001110011011000011110000110110011000111100' => 6, '11111111000000110000001100000110000011000001100000110000011000001100000011000000' => 7, '00111100011001101100001101100110001111000110011011000011110000110110011000111100' => 8, '00111100011001101100001111000011011001110011101100000011010000110110011000111100' => 9);
Nehmen Sie abschließend für die Genauigkeit 100 Schleifen und sehen Sie:
Erkennung des Bestätigungscodes!
Haha, die Genauigkeit beträgt 100 %Am Ende geschrieben
Der Zweck dieses Artikels ist um die WEB-Entwicklung zu ermöglichen. Bitte achten Sie bei der Generierung von Verifizierungscodes auf Sicherheit und verwenden Sie diese bitte nicht für illegale Zwecke
Der Code ist auf Github:https://github.com/chaclee/sf