摘要:驗證碼全自動區分計算機和人類的公開圖靈測試英語,簡稱,俗稱驗證碼,是一種區分用戶是計算機和人的公共全自動程序。百科介紹說的簡單點就是隨機生成的字符,輸出在一張圖片上這里不考慮其他形式的拖拽短信驗證碼等等。
一直想寫這個,過了很久今天興趣來了索性記錄下。
驗證碼全自動區分計算機和人類的公開圖靈測試(英語:Completely Automated Public Turing test to tell Computers and Humans Apart,簡稱CAPTCHA),俗稱驗證碼,是一種區分用戶是計算機和人的公共全自動程序。在CAPTCHA測試中,作為服務器的計算機會自動生成一個問題由用戶來解答。這個問題可以由計算機生成并評判,但是必須只有人類才能解答。由于計算機無法解答CAPTCHA的問題,所以回答出問題的用戶就可以被認為是人類。
百科介紹
說的簡單點就是隨機生成的字符,輸出在一張圖片上[這里不考慮其他形式的拖拽/短信驗證碼等等]。
常見類型 思路本文只做演示使用,故取第一張圖片驗證碼作為講解示例。
圖片上的每一點都有其RGB值,通過取色器可以獲取到,肉眼觀察可以看出該圖驗證碼是純數字純色背景
通過取色器看出該驗證碼背景色RGB值為(212,214,204)
實現下面我們來用PHP的imagecolorsforindex函數取得圖片所有點的RGB值:
$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); } }
結果如下:
各位可能想問這有什么用呢? 下面我們換一種方式來顯示數據,為背景色輸出□,驗證碼區域輸出■,再來看下:
for ($i = 0; $i < $hid; $i ++) { for ($j = 0; $j < $wid; $j ++) { if ($rgbArray[$i][$j]["red"] == 212) { echo "□"; } else { echo "■"; } } echo "
"; }
效果:
這樣一下是不是很清楚了。
但是你可能還是有疑問,盡管可以看出來了,但是如何知道是多少呢?
下面我們來分析下:
每個驗證碼直接間距4格,左右間距6/10格,上下間距16/10格。
我們再來去掉這些干擾點,可以看得更清晰些:
是不是很清晰了?可能還是有人會問,你講這么多到底要怎么才能知道圖片上的數字是多少.
好吧,說下我的思路,我們將剛剛的□和■換為0和1,而這些數字形狀是固定的,這樣就可以得到0-9每一個字的每一個區域8*10都有0和1組成了,
我們再來進行每8個切分,去掉4格間距,循環得出0-9的01組合值:
$dic = array( "00011000001111000110011011000011110000111100001111000011011001100011110000011000" => 0, "00011000001110000111100000011000000110000001100000011000000110000001100001111110" => 1, "00111100011001101100001100000011000001100000110000011000001100000110000011111111" => 2, "01111100110001100000001100000110000111000000011000000011000000111100011001111100" => 3, "00000110000011100001111000110110011001101100011011111111000001100000011000000110" => 4, "11111110110000001100000011011100111001100000001100000011110000110110011000111100" => 5, "00111100011001101100001011000000110111001110011011000011110000110110011000111100" => 6, "11111111000000110000001100000110000011000001100000110000011000001100000011000000" => 7, "00111100011001101100001101100110001111000110011011000011110000110110011000111100" => 8, "00111100011001101100001111000011011001110011101100000011010000110110011000111100" => 9 );
得出這10個后組合成數組,每次解析圖片RGB換成對應數組值就得到驗證碼值了。下面來演示下:
最后為了準確性,取100個循環看看:
哈哈,準確率100%
寫在最后本文的目的是為了讓WEB開發者在生成驗證碼時注意安全,請勿用于非法目的.
本項目所演示的站點(杭州電子科技大學圖書館->我的圖書館)無法打開,各位參考原理即可
代碼已在github:https://github.com/chaclee/sf
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30283.html
小編寫這篇文章的主要目的,主要是給大家去做一個相關的介紹,介紹的內容是關于Python通用驗證碼的一些相關小技巧,包括有通用驗證碼識別相關的OCR庫,同時也會給大家介紹一些內容,介紹包括OCR庫ddddocr安裝使用教程,下面小編就給大家詳細解答下。 前言 在使用自動化登錄網站的時候,經常輸入用戶名和密碼后會遇到驗證碼。今天介紹一款通用驗證碼識別OCR庫,對驗證碼識別徹底說拜拜,它的名字是...
摘要:模擬登錄新浪微博的核心,也是與模擬登錄最大的不同,密碼加密。已經實現模擬新浪微博登錄的功能,之后不再更新。 參考資料: http://www.csuldw.com/2016/11/10/2016-11-10-simulate-sina-login/ http://blog.csdn.net/fly_leopard/article/details/51148904 http://www....
摘要:成果展示總結這個腳本就是簡單的利用的庫,來模擬用戶注冊的流程,以達到邀請用戶的目的。這個腳本也有很多不完善的地方,比如驗證碼識別機器人檢測一些錯誤判斷都沒有,待完善的地方還有很多。這個腳本只是為了和大家交流學習。 ??區塊魚是一個基于區塊鏈的游戲,這個游戲目前有個邀請活動,邀請好友注冊,送相應種類的魚,不同的魚價格不一樣 普通魚 0.015 ETH起(邀請3個好友) 稀缺魚 0.05...
閱讀 1377·2021-10-08 10:04
閱讀 2681·2021-09-22 15:23
閱讀 2724·2021-09-04 16:40
閱讀 1172·2019-08-29 17:29
閱讀 1492·2019-08-29 17:28
閱讀 2988·2019-08-29 14:02
閱讀 2221·2019-08-29 13:18
閱讀 838·2019-08-23 18:35