1. 程式人生 > >自動識別圖形驗證碼

自動識別圖形驗證碼

現在大多數網站都採用了驗證碼來防止暴力破解或惡意提交。但驗證碼真的就很安全嗎?真的就不能被機器識別??
我先講講我是怎麼實現站外提交留言到一個網站的程式。
這個網站的留言版大致如下:




我一看這種簡單的4位數字驗證碼,馬上就感覺到有戲了。直覺告訴我讓電腦來識別這些圖片驗證碼據對簡單o(∩_∩)o...
首先我馬上在這個頁面用右鍵選單看原始碼


知道驗證碼獲取頁面後 你可以直接用 http://www.XXXX.com/imgchk/validatecode.asp 這樣去訪問你會發現你開啟的就是一個驗證碼圖片。




對的其實返回的就是圖片檔案的2進位制流而已。接著先用右鍵儲存一張驗證碼的圖片。因為要開始分析這張圖片了,什麼用什麼工具?PhotoShop????不用就一般的畫圖工具就可以了。我們要搞清楚的是 這幾個數字分別佔幾個畫素就可以了。




可以看出 一個數字5*9  也就是45個畫素。恩 這就可以了 另外我們可以看出 預設區域就是白色
(姑且說是白色因為我們肉眼看就是白色)
那麼我的程式識別原理就是固定去掃描這45個畫素點。看每個點的顏色是不是和預設的顏色一致
一致的話就標記為0 ,不一致就標記為1 。
如一個數子是2 那麼我的程式掃描出來的影象就應該是:
011110
100001
000001
000001
000010
000100
001000
010000
100000
111111
如果一個數字是7那麼掃描出來的影象就是:
111111
100001
000010
000010
000100
000100
001000
001000
010000
010000

恩,就這麼簡單呵呵。下面給出影象 掃描的java類 (不好意思,在我會的語言裡面除開java就剩sql了)


package com.util;

//~--- JDK imports ------------------------------------------------------------


import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

import java.awt.*;
import java.awt.image.*;

import java.io.*;
import java.io.FileOutputStream;
import java.io.OutputStream;

import java.net.*;

import javax.imageio.*;
import
 javax.imageio.ImageIO;

/**
 *   登陸驗證圖片轉換為數字
 *
 *
 * 
@version    1.0, 08/04/20
 * 
@author     張健瀅
 
*/

publicclass ImgIdent {

    
// 數字字元位元表
privatefinallong[][] NUMERIC ={
        
512104545562436190 },    // '0'
148931080136348222 },    // '1'
51197139469273663 },     // '2'
51197140617045598 },     // '3'
35168914586948743 },     // '4'
106548639817045598 },    // '5'
239208494830871646 },    // '6'
106562368469239824 },    // '7'
512104542562436190 },    // '8'
512104547486805660 }
    }
;                               // '9'

    
// 字框高
privateint intCharHeight =10;

    
// 字框橫向間隙
privateint intCharSpaceH =5;

    
// 字框縱向間隙
privateint intCharSpaceY =1;

    
// 字框寬
privateint           intCharWidth =5;
    
privateint           IntImgHeight;
    
private BufferedImage img;
    
privateint           intBgColor;
    
privateint           intCharColor;
    
privateint           intImgWith;
    
privateint           intMaxX;
    
privateint           intMaxY;
    
privateint           intMinX;
    
privateint           intMinY;

    
// 座標原點
private Point  pOrigin;
    
private String strNum;

    
/**
     * Constructs ...
     *
     *
     * 
@param img
     *
     * 
@throws IOException
     
*/

    
public ImgIdent(BufferedImage img) throws IOException {
        
this.img = img;
        init();
    }


    
/**
     *   建構函式
     *   
@param   file     本地檔案
     *   
@throws   IOException
     
*/

    
public ImgIdent(File file) throws IOException {
        img 
= ImageIO.read(file);
        init();
    }


    
/**
     *   建構函式
     *   
@param   url    遠端檔案
     *   
@throws   IOException
     
*/

    
public ImgIdent(URL url) throws IOException {
        img 
= ImageIO.read(url);
        init();
    }


    
/**
     *   類初始工作
     
*/

    
privatevoid init() {

        
// 得到圖象的長度和寬度
        intImgWith   = img.getWidth();
        IntImgHeight 
= img.getHeight();

        
// 得到圖象的背景顏色
        intBgColor = img.getRGB(74);

        
// System.out.println(intBgColor);

        
// 初始化圖象原點座標
        pOrigin =new Point(00);
    }


    
/**
     * Method description
     *
     
*/

    
privatevoid getBaseInfo() {
        System.out.println(intBgColor 
+"|"+ intCharColor);
        System.out.println(intMinX 
+"|"+ intMinY +"|"+ intMaxX +"|"+ intMaxY);
    }


相關推薦

自動識別圖形驗證

現在大多數網站都採用了驗證碼來防止暴力破解或惡意提交。但驗證碼真的就很安全嗎?真的就不能被機器識別??我先講講我是怎麼實現站外提交留言到一個網站的程式。這個網站的留言版大致如下:我一看這種簡單的4位數字驗證碼,馬上就感覺到有戲了。直覺告訴我讓電腦來識別這些圖片驗證碼據對簡單o

利用Python識別圖形驗證!實現自動登入!室友驚訝的合不攏嘴!

驗證碼有圖形驗證碼、極驗滑動驗證碼、點觸驗證碼、宮格驗證碼。這回重點講講圖形驗證碼的識別。 雖說圖形驗證碼最簡單,但是對於我這等新手,還是要苦學一番。首先尋找測試網站,網站選的是如雲閣小說網,小網站不怕被封。他們的驗證碼一般如下:      

Python識別圖形驗證,實現自動登陸(附視訊教程)

驗證碼有圖形驗證碼、極驗滑動驗證碼、點觸驗證碼、宮格驗證碼。這回重點講講圖形驗證碼的識別。 雖說圖形驗證碼最簡單,但是對於我這等新手,還是要苦學一番。首先尋找測試網站,網站選的是如雲閣小說網,小網站不怕被封。他們的驗證碼一般如下:視訊教程:     &n

驗證識別——圖形驗證

img tex 下載 分享 int class 驗證碼 pre imp 先找了一個簡單的圖形驗證碼進行測試,比如知網,從網頁裏把驗證碼下載到本地 進行簡單的灰度處理和二值化處理,能夠提高不少識別正確率 驗證碼:    代碼: 1 import tess

[Python][爬蟲]利用OCR技術識別圖形驗證

releases 查找表 方法 jpg threshold tex ima 輸出 sim ocr圖片識別通常可以利用tesserocr模塊,將圖片中內容識別出來並轉換為text並輸出 Tesserocr是python的一個OCR識別庫,是對tesseract做的一層pyth

利用pytesser識別圖形驗證

簡單識別 1.一般思路 驗證碼識別的一般思路為: 圖片降噪 圖片切割 影象文字輸出 1.1 圖片降噪 所謂降噪就是把不需要的資訊通通去除,比如背景,干擾線,干擾畫素等等,只剩下需要識別的文字,讓圖片變成2進位制點陣最好。 對於彩色背景

mac使用python識別圖形驗證

前言 最近在研究驗證碼相關的操作,所以準備記錄下安裝以及使用的過程。雖然之前對驗證碼的破解有所瞭解的,但是之前都是簡單使用之後就不用了,沒有記錄一個詳細的過程,所以後面再用起來也要重新從網上查詢資料比較麻煩,所以這裡準備對研究過程的關鍵點做一個記錄。 首先這篇文章,主要是研究圖形驗證碼,後期會不定時拓展內

網路爬蟲以及自動化測試中圖形驗證識別解決思路以及方法

前言 做自動化測試的朋友都知道圖形驗證碼在整個自動化執行過程中,很可能是阻礙推進的問題,可以採用萬能驗證碼(開發哥哥會流出一個供自動化測試用的),如果不通過開發預留,有以下解決方案。 解決思路 1.python3自帶光學字元識別模組tesserocr與pytesseract,可以識別簡單驗證碼; 2.稍

python爬蟲時圖形驗證識別( tesserocr)

window環境下: 第一步:安裝tesseract:教程如下:https://www.cnblogs.com/jianqingwang/p/6978724.html    第二步:安裝 tesserocr  : 到這裡下載whl版本 &

Python實現自動登入,強行突破圖形驗證

  驗證碼有圖形驗證碼、極驗滑動驗證碼、點觸驗證碼、宮格驗證碼。這回重點講講圖形驗證碼的識別。 學習Python中有不明白推薦加入交流群                 號:516107834 &

295day(圖形驗證識別,極驗滑動驗證識別原理)

《2018年7月24日》【連續295天】 標題:圖形驗證碼的識別,極驗滑動驗證碼識別原理; 內容: 圖形驗證碼: 測試: import tesserocr from PIL import Image image =Image.open('code.jpg')

圖形驗證識別技術

阻礙我們爬蟲的。有時候正是在登入或者請求一些資料時候的圖形驗證碼。因此這裡我們講解一種能將圖片翻譯成文字的技術。將圖片翻譯成文字一般被成力光學文字R別( optical Character Recognition),簡寫OCR。實現OCR的庫不是很多,特別是開源的 因為這塊存在一定的技術壁(需要大量

Python爬蟲之自動登入與驗證識別

轉自:http://blog.csdn.net/tobacco5648/article/details/50640691 在用爬蟲爬取網站資料時,有些站點的一些關鍵資料的獲取需要使用賬號登入,這裡可以使用requests傳送登入請求,並用Session物件來自動處理相關

Python驗證識別:利用pytesser識別簡單圖形驗證

https://my.oschina.net/jhao104/blog/647326?fromerr=xJxwPW5X 一、探討  識別圖形驗證碼可以說是做爬蟲的必修課,涉及到計算機圖形學,機器學習,機器視覺,人工智慧等等高深領域……    簡單地說,計算機圖形學的主要

Python3.4---實戰專案-自動下載圖片驗證,並儲存到專門資料夾,使用圖片驗證識別,然後打印出來

Python3.4—實戰專案-自動下載圖片驗證碼,並儲存到專門資料夾,使用圖片驗證碼庫識別,然後打印出來 1、環境部署 參考文章《使用Python識別圖片驗證碼》內容,製造好圖片驗證碼識別庫msweb1.dat 1.1、對圖片驗證碼隨時下載的URL地址

圖形驗證識別

sso div rda har poi The tps pan 掃描 OCR 技術: (1) 在爬蟲過程中,難免會遇到各種各樣的驗證碼,而大多數驗證碼還是罔形驗證碼,這時候我們可以直接用 OCR 來識別(2) OCR ,即 Optical Character Recogn

python3 網路爬蟲開發實戰 win10環境下 圖形驗證識別需要安裝的工具及地址

先下載安裝tesseract exe檔案 tesseract exe檔案安裝下載地址:https://digi.bib.uni-m

Jfinal框架登陸頁面的圖形驗證

ima 獲得 希望 刷新 body 是否 異步刷新 tor console 本文轉自,http://www.bubuko.com/infodetail-720511.html 驗證碼的工具類, 這個jfinal自帶的也有,但是下面這個和Jfinal自帶的有一點點小的改動

Tornado框架實現圖形驗證功能

tor length turn 黑客 body world 工作流 params fun 圖形驗證碼是項目開發過程中經常遇到的一個功能,在很多語言中都有對應的不同形式的圖形驗證碼功能的封裝,python 中同樣也有類似的封裝操作,通過繪制生成一個指定的圖形數據,讓前端HTM

java圖形驗證生成工具類及web頁面校驗驗證

組合 line des resp word buffere 需要 case ali 最近做驗證碼,參考網上案例,發現有不少問題,特意進行了修改和完善。驗證碼生成器:[ht