驗證碼分為如下幾類:數字型、字符型、符號型、綜合型。
一般驗證碼屬于數字型的,不過有的圖片中生成了不少彩色和黑白的噪音點(指驗證圖片上的斑點)。那么我們應該怎么去識別呢?傳統的驗證碼識別方式很簡單,由于數字的位置是固定的,所以我們只需要提取每一幅數字的圖片(沒有噪音點的)然后把每一個特殊數字獨有的象素位置記錄下來,然后在網絡上提取需要破解的特征碼,祛除噪音點,對其位置和記錄位置進行比對,那就是么就能確定相應的數字了。
總結一下傳統的就是:
1.先分析驗證碼,前景顏色是否不定
2.然后把驗證碼的寬度/驗證碼文字個數,比如一驗證碼下載后寬度為60,有4個數字,那么就60/4=15,然后保存每個字,如果只有數字保存0-9數字到位圖文件,如果英文那更麻煩點,0-9,A-Z都要保存到位圖,位圖的前景色都不變,保持一種顏色,背景隨便你改不改
3.如果前景要變則將文字統一為同種顏色,每個數字0-9的點陣都有個公共點,取該公共點顏色然后把前景全部統一成一種顏色,比如白色{255,255,255},位圖的結構是BGR,而不是RGB
4.然后進行比較,如果驗證碼的一點為白色,第2步保存的位圖同一點也是白色,那么頻率增加1
5.最后頻率最高的就是驗證碼了!
接下來要做的就是做個post程序了,這個太簡單了,代碼你就自己寫吧!不過也要做到如下細節:做成多線程程序進行發貼,不然程序會失去響應的。最好是可以導入大量的代理IP的,然后就是發貼的內容最后加上幾個隨機字符,這樣可以防止重復貼的過濾!最重要的,只是做測試,發貼量不要太多、不要亂發廣告貼!
其實上述方法已經不是只是對驗證碼進行識別了,完全可以用到現實生活中去,比如說手寫體識別、車牌識別等等,但是現實生活中我們還要進行更多的加工,比如說圓形檢測,多邊形檢測等等。所以說從網絡安全技術中,也有很多東西能造福社會,還等待我們繼續創造!