聞宏強(qiáng) 周華 陸澄澹 季永煒
摘 要
隨著國內(nèi)一些大型網(wǎng)站頻頻突破驗(yàn)證碼防護(hù),本文試圖通過闡述驗(yàn)證碼基本知識(shí)、二值化處理、字符分割、字庫校正等內(nèi)容,使網(wǎng)站開發(fā)人員能更好的了解攻擊者的常用技術(shù),并幫助設(shè)計(jì)出更好的驗(yàn)證碼,以此來提高網(wǎng)站驗(yàn)證碼的整體水平。
【關(guān)鍵詞】驗(yàn)證碼 識(shí)別 字符分割 二值化
1 驗(yàn)證碼概念
驗(yàn)證碼是一種區(qū)分用戶是計(jì)算機(jī)還是人的公共全自動(dòng)程序,可以防止惡意破解密碼、刷票、論壇灌水,可有效防止某個(gè)黑客對(duì)某一個(gè)特定注冊(cè)用戶用特定程序暴力破解方式進(jìn)行不斷的登陸嘗試。
2 驗(yàn)證碼識(shí)別流程
驗(yàn)證碼識(shí)別包括:圖像采集、圖像預(yù)處理、圖像分割、樣本訓(xùn)練、圖像識(shí)別等內(nèi)容。驗(yàn)證碼圖像采集就是直接通過HTTP抓取HTML,然后分析出圖片的URL,進(jìn)行保存或下載。圖像預(yù)處理就是對(duì)圖像進(jìn)行去噪、二值化處理,找出文字所在的區(qū)域。圖像分割就是對(duì)特定區(qū)域包括的文字進(jìn)行分割。樣本訓(xùn)練就是通過人工挑選具有代表性的圖片進(jìn)行學(xué)習(xí)和訓(xùn)練。圖像識(shí)別對(duì)待輸入的圖片進(jìn)行識(shí)別,驗(yàn)證算法或程序的可靠性。
2.1 圖像采集
以C#代碼為列獲取驗(yàn)證碼圖片內(nèi)容信息,其中mshtml命名空間能對(duì)WebBrowser空間內(nèi)容進(jìn)行讀取,具體代碼如下:
using mshtml;
private Image GetWebImage(WebBrowser WebCtl, HtmlElement ImgeTag)
{
HTMLDocument doc = (HTMLDocument)WebCtl.Document.DomDocument;
HTMLBody body = (HTMLBody)doc.body;
IHTMLControlRange rang = (IHTMLControlRange)body.createControlRange();
IHTMLControlElement Img = (IHTMLControlElement)ImgeTag.DomElement; //圖片地址
Image oldImage = Clipboard.GetImage();
rang.add(Img);
rang.execCommand("Copy", false, null); //拷貝到內(nèi)存
Image numImage = Clipboard.GetImage();
try
{Clipboard.SetImage(oldImage);
}
catch
{
}
return numImage;
}
2.2 類間方差閥值二值化處理
設(shè)原始灰度圖像灰度級(jí)為L,灰度級(jí)i的像素點(diǎn)為ni,則圖像的全部像素?cái)?shù)為N=n0+n1+…nL-1歸一化直方圖,則 ,按灰度級(jí)用閥值t劃分為兩類:C0=(0,…,t),C1=(t+1,t+2,…,L-1),因此C0和C1類的出現(xiàn)概率及均值可轉(zhuǎn)化為:
(1)
(2)
(3)
(4)
其中:
(5)
(6)
對(duì)任何t值,下式都能成立
w0?0+w1?1=?T,
w0+w1=1,
C0和C1類的方差可由下式求得:
(7)
(8)
定義類內(nèi)方差為
(9)
類間方差為
(10)
總體方差為
(11)
引入下列關(guān)于t的等價(jià)的判決準(zhǔn)則:
(12)
(13)
(14)
這三個(gè)準(zhǔn)則是彼此等效的,把使 C0和C1兩類得到最佳分離的t值作為最佳閥值,因此將A(t),B(t),C(t)定為最大判決準(zhǔn)則。由于是基于二階統(tǒng)計(jì)特性,而是基于一階統(tǒng)計(jì)特性,和 是閥值t的函數(shù),而 與t值無關(guān),因此三個(gè)準(zhǔn)則中B(t)最為簡單,所以閥值t*:。
2.3 中值濾波去除干擾點(diǎn)
中值濾波的主要功能是讓周圍像素灰度值的差比較大的像素改取與周圍像素值相近的值,從而可以消除孤立的噪聲點(diǎn)。工作步驟為:
(1)將模板(3*3矩陣)在二值化圖中漫游,并將模板中心與圖中的某個(gè)像素位置重合;
(2)讀取模板下各對(duì)應(yīng)像素的灰度值(0或1);
(3)如果中心點(diǎn)為1,周圍四周為0,則將孤立亮點(diǎn)設(shè)為0(噪音)。
2.4 直方圖投影字符分割
圖像灰度級(jí)范圍為0,1,…,t-1,設(shè)灰度級(jí)i的像素?cái)?shù)為ni,則一副圖像的總像素N為:
N= (15)
灰度級(jí)出現(xiàn)的概率定義為
Pi= (16)
如果灰度級(jí)直方圖出現(xiàn)明顯的雙峰狀,則選取兩峰之間的谷底所對(duì)應(yīng)的灰度級(jí)作為閥值。
2.5 樣本訓(xùn)練和識(shí)別
Tesseract的OCR開源引擎是業(yè)內(nèi)最準(zhǔn)確的三款識(shí)別引擎之一,具有豐富的公共識(shí)別庫,也可根據(jù)需要進(jìn)行個(gè)人樣本庫的建設(shè)。
同時(shí)支持java、.NET、PHP、Python等主流語言都有相應(yīng)的封裝類庫。識(shí)別的主要C#代碼如下:
using OCR.TesseractWrapper;
using (Bitmap bitmap = (Bitmap)Image.FromFile(file))
TesseractProcessor processor = new TesseractProcessor();
processor.Init();
string result=processor.Recognize(newBitmap);
3 結(jié)束語
通過對(duì)某些論壇驗(yàn)證碼進(jìn)行試驗(yàn)測試,發(fā)現(xiàn)對(duì)相對(duì)簡單驗(yàn)證碼識(shí)別率高達(dá)95%以上;對(duì)一些字符粘連、動(dòng)態(tài)變化的驗(yàn)證碼,識(shí)別率很低,因此在識(shí)別前應(yīng)對(duì)圖片進(jìn)行特殊的處理。同時(shí)建議對(duì)系統(tǒng)安全性要求高的網(wǎng)站驗(yàn)證碼多加入一些識(shí)別率低的噪音如中文,適度旋轉(zhuǎn),粘連,動(dòng)態(tài)變化等內(nèi)容,以此提高網(wǎng)站的防護(hù)能力。
參考文獻(xiàn)
[1]Rafael C.Gonzalez,Richard E.Woods.數(shù)字圖像處理(第三版)[M].北京:電子工業(yè)出版社,2011.
[2]劉直芳,王運(yùn)瓊,朱敏.數(shù)字圖像處理與分析[M].北京:清華大學(xué)出版社,2006.
[3]Gary Bradski,Adrian Kaehler.Learning OpenCV[M].南京:東南大學(xué)出版社,2009.
[4]盛驟,謝式千,潘承毅.概率論和數(shù)理統(tǒng)計(jì)[M].北京:高等教育出版社,2000.
[5]Watson·K.,Nagel·C,齊立波翻譯.C#入門經(jīng)典[M].北京:清華大學(xué)出版社,2006.
作者簡介
聞宏強(qiáng)(1987-),男,浙江建德市人。大學(xué)本科學(xué)歷?,F(xiàn)為浙江省電子信息產(chǎn)品檢驗(yàn)所軟件評(píng)測中心助理工程師。主要研究方向?yàn)樾畔踩?/p>
作者單位
浙江省電子信息產(chǎn)品檢驗(yàn)所 軟件評(píng)測中心 浙江省杭州市 310007endprint
摘 要
隨著國內(nèi)一些大型網(wǎng)站頻頻突破驗(yàn)證碼防護(hù),本文試圖通過闡述驗(yàn)證碼基本知識(shí)、二值化處理、字符分割、字庫校正等內(nèi)容,使網(wǎng)站開發(fā)人員能更好的了解攻擊者的常用技術(shù),并幫助設(shè)計(jì)出更好的驗(yàn)證碼,以此來提高網(wǎng)站驗(yàn)證碼的整體水平。
【關(guān)鍵詞】驗(yàn)證碼 識(shí)別 字符分割 二值化
1 驗(yàn)證碼概念
驗(yàn)證碼是一種區(qū)分用戶是計(jì)算機(jī)還是人的公共全自動(dòng)程序,可以防止惡意破解密碼、刷票、論壇灌水,可有效防止某個(gè)黑客對(duì)某一個(gè)特定注冊(cè)用戶用特定程序暴力破解方式進(jìn)行不斷的登陸嘗試。
2 驗(yàn)證碼識(shí)別流程
驗(yàn)證碼識(shí)別包括:圖像采集、圖像預(yù)處理、圖像分割、樣本訓(xùn)練、圖像識(shí)別等內(nèi)容。驗(yàn)證碼圖像采集就是直接通過HTTP抓取HTML,然后分析出圖片的URL,進(jìn)行保存或下載。圖像預(yù)處理就是對(duì)圖像進(jìn)行去噪、二值化處理,找出文字所在的區(qū)域。圖像分割就是對(duì)特定區(qū)域包括的文字進(jìn)行分割。樣本訓(xùn)練就是通過人工挑選具有代表性的圖片進(jìn)行學(xué)習(xí)和訓(xùn)練。圖像識(shí)別對(duì)待輸入的圖片進(jìn)行識(shí)別,驗(yàn)證算法或程序的可靠性。
2.1 圖像采集
以C#代碼為列獲取驗(yàn)證碼圖片內(nèi)容信息,其中mshtml命名空間能對(duì)WebBrowser空間內(nèi)容進(jìn)行讀取,具體代碼如下:
using mshtml;
private Image GetWebImage(WebBrowser WebCtl, HtmlElement ImgeTag)
{
HTMLDocument doc = (HTMLDocument)WebCtl.Document.DomDocument;
HTMLBody body = (HTMLBody)doc.body;
IHTMLControlRange rang = (IHTMLControlRange)body.createControlRange();
IHTMLControlElement Img = (IHTMLControlElement)ImgeTag.DomElement; //圖片地址
Image oldImage = Clipboard.GetImage();
rang.add(Img);
rang.execCommand("Copy", false, null); //拷貝到內(nèi)存
Image numImage = Clipboard.GetImage();
try
{Clipboard.SetImage(oldImage);
}
catch
{
}
return numImage;
}
2.2 類間方差閥值二值化處理
設(shè)原始灰度圖像灰度級(jí)為L,灰度級(jí)i的像素點(diǎn)為ni,則圖像的全部像素?cái)?shù)為N=n0+n1+…nL-1歸一化直方圖,則 ,按灰度級(jí)用閥值t劃分為兩類:C0=(0,…,t),C1=(t+1,t+2,…,L-1),因此C0和C1類的出現(xiàn)概率及均值可轉(zhuǎn)化為:
(1)
(2)
(3)
(4)
其中:
(5)
(6)
對(duì)任何t值,下式都能成立
w0?0+w1?1=?T,
w0+w1=1,
C0和C1類的方差可由下式求得:
(7)
(8)
定義類內(nèi)方差為
(9)
類間方差為
(10)
總體方差為
(11)
引入下列關(guān)于t的等價(jià)的判決準(zhǔn)則:
(12)
(13)
(14)
這三個(gè)準(zhǔn)則是彼此等效的,把使 C0和C1兩類得到最佳分離的t值作為最佳閥值,因此將A(t),B(t),C(t)定為最大判決準(zhǔn)則。由于是基于二階統(tǒng)計(jì)特性,而是基于一階統(tǒng)計(jì)特性,和 是閥值t的函數(shù),而 與t值無關(guān),因此三個(gè)準(zhǔn)則中B(t)最為簡單,所以閥值t*:。
2.3 中值濾波去除干擾點(diǎn)
中值濾波的主要功能是讓周圍像素灰度值的差比較大的像素改取與周圍像素值相近的值,從而可以消除孤立的噪聲點(diǎn)。工作步驟為:
(1)將模板(3*3矩陣)在二值化圖中漫游,并將模板中心與圖中的某個(gè)像素位置重合;
(2)讀取模板下各對(duì)應(yīng)像素的灰度值(0或1);
(3)如果中心點(diǎn)為1,周圍四周為0,則將孤立亮點(diǎn)設(shè)為0(噪音)。
2.4 直方圖投影字符分割
圖像灰度級(jí)范圍為0,1,…,t-1,設(shè)灰度級(jí)i的像素?cái)?shù)為ni,則一副圖像的總像素N為:
N= (15)
灰度級(jí)出現(xiàn)的概率定義為
Pi= (16)
如果灰度級(jí)直方圖出現(xiàn)明顯的雙峰狀,則選取兩峰之間的谷底所對(duì)應(yīng)的灰度級(jí)作為閥值。
2.5 樣本訓(xùn)練和識(shí)別
Tesseract的OCR開源引擎是業(yè)內(nèi)最準(zhǔn)確的三款識(shí)別引擎之一,具有豐富的公共識(shí)別庫,也可根據(jù)需要進(jìn)行個(gè)人樣本庫的建設(shè)。
同時(shí)支持java、.NET、PHP、Python等主流語言都有相應(yīng)的封裝類庫。識(shí)別的主要C#代碼如下:
using OCR.TesseractWrapper;
using (Bitmap bitmap = (Bitmap)Image.FromFile(file))
TesseractProcessor processor = new TesseractProcessor();
processor.Init();
string result=processor.Recognize(newBitmap);
3 結(jié)束語
通過對(duì)某些論壇驗(yàn)證碼進(jìn)行試驗(yàn)測試,發(fā)現(xiàn)對(duì)相對(duì)簡單驗(yàn)證碼識(shí)別率高達(dá)95%以上;對(duì)一些字符粘連、動(dòng)態(tài)變化的驗(yàn)證碼,識(shí)別率很低,因此在識(shí)別前應(yīng)對(duì)圖片進(jìn)行特殊的處理。同時(shí)建議對(duì)系統(tǒng)安全性要求高的網(wǎng)站驗(yàn)證碼多加入一些識(shí)別率低的噪音如中文,適度旋轉(zhuǎn),粘連,動(dòng)態(tài)變化等內(nèi)容,以此提高網(wǎng)站的防護(hù)能力。
參考文獻(xiàn)
[1]Rafael C.Gonzalez,Richard E.Woods.數(shù)字圖像處理(第三版)[M].北京:電子工業(yè)出版社,2011.
[2]劉直芳,王運(yùn)瓊,朱敏.數(shù)字圖像處理與分析[M].北京:清華大學(xué)出版社,2006.
[3]Gary Bradski,Adrian Kaehler.Learning OpenCV[M].南京:東南大學(xué)出版社,2009.
[4]盛驟,謝式千,潘承毅.概率論和數(shù)理統(tǒng)計(jì)[M].北京:高等教育出版社,2000.
[5]Watson·K.,Nagel·C,齊立波翻譯.C#入門經(jīng)典[M].北京:清華大學(xué)出版社,2006.
作者簡介
聞宏強(qiáng)(1987-),男,浙江建德市人。大學(xué)本科學(xué)歷?,F(xiàn)為浙江省電子信息產(chǎn)品檢驗(yàn)所軟件評(píng)測中心助理工程師。主要研究方向?yàn)樾畔踩?/p>
作者單位
浙江省電子信息產(chǎn)品檢驗(yàn)所 軟件評(píng)測中心 浙江省杭州市 310007endprint
摘 要
隨著國內(nèi)一些大型網(wǎng)站頻頻突破驗(yàn)證碼防護(hù),本文試圖通過闡述驗(yàn)證碼基本知識(shí)、二值化處理、字符分割、字庫校正等內(nèi)容,使網(wǎng)站開發(fā)人員能更好的了解攻擊者的常用技術(shù),并幫助設(shè)計(jì)出更好的驗(yàn)證碼,以此來提高網(wǎng)站驗(yàn)證碼的整體水平。
【關(guān)鍵詞】驗(yàn)證碼 識(shí)別 字符分割 二值化
1 驗(yàn)證碼概念
驗(yàn)證碼是一種區(qū)分用戶是計(jì)算機(jī)還是人的公共全自動(dòng)程序,可以防止惡意破解密碼、刷票、論壇灌水,可有效防止某個(gè)黑客對(duì)某一個(gè)特定注冊(cè)用戶用特定程序暴力破解方式進(jìn)行不斷的登陸嘗試。
2 驗(yàn)證碼識(shí)別流程
驗(yàn)證碼識(shí)別包括:圖像采集、圖像預(yù)處理、圖像分割、樣本訓(xùn)練、圖像識(shí)別等內(nèi)容。驗(yàn)證碼圖像采集就是直接通過HTTP抓取HTML,然后分析出圖片的URL,進(jìn)行保存或下載。圖像預(yù)處理就是對(duì)圖像進(jìn)行去噪、二值化處理,找出文字所在的區(qū)域。圖像分割就是對(duì)特定區(qū)域包括的文字進(jìn)行分割。樣本訓(xùn)練就是通過人工挑選具有代表性的圖片進(jìn)行學(xué)習(xí)和訓(xùn)練。圖像識(shí)別對(duì)待輸入的圖片進(jìn)行識(shí)別,驗(yàn)證算法或程序的可靠性。
2.1 圖像采集
以C#代碼為列獲取驗(yàn)證碼圖片內(nèi)容信息,其中mshtml命名空間能對(duì)WebBrowser空間內(nèi)容進(jìn)行讀取,具體代碼如下:
using mshtml;
private Image GetWebImage(WebBrowser WebCtl, HtmlElement ImgeTag)
{
HTMLDocument doc = (HTMLDocument)WebCtl.Document.DomDocument;
HTMLBody body = (HTMLBody)doc.body;
IHTMLControlRange rang = (IHTMLControlRange)body.createControlRange();
IHTMLControlElement Img = (IHTMLControlElement)ImgeTag.DomElement; //圖片地址
Image oldImage = Clipboard.GetImage();
rang.add(Img);
rang.execCommand("Copy", false, null); //拷貝到內(nèi)存
Image numImage = Clipboard.GetImage();
try
{Clipboard.SetImage(oldImage);
}
catch
{
}
return numImage;
}
2.2 類間方差閥值二值化處理
設(shè)原始灰度圖像灰度級(jí)為L,灰度級(jí)i的像素點(diǎn)為ni,則圖像的全部像素?cái)?shù)為N=n0+n1+…nL-1歸一化直方圖,則 ,按灰度級(jí)用閥值t劃分為兩類:C0=(0,…,t),C1=(t+1,t+2,…,L-1),因此C0和C1類的出現(xiàn)概率及均值可轉(zhuǎn)化為:
(1)
(2)
(3)
(4)
其中:
(5)
(6)
對(duì)任何t值,下式都能成立
w0?0+w1?1=?T,
w0+w1=1,
C0和C1類的方差可由下式求得:
(7)
(8)
定義類內(nèi)方差為
(9)
類間方差為
(10)
總體方差為
(11)
引入下列關(guān)于t的等價(jià)的判決準(zhǔn)則:
(12)
(13)
(14)
這三個(gè)準(zhǔn)則是彼此等效的,把使 C0和C1兩類得到最佳分離的t值作為最佳閥值,因此將A(t),B(t),C(t)定為最大判決準(zhǔn)則。由于是基于二階統(tǒng)計(jì)特性,而是基于一階統(tǒng)計(jì)特性,和 是閥值t的函數(shù),而 與t值無關(guān),因此三個(gè)準(zhǔn)則中B(t)最為簡單,所以閥值t*:。
2.3 中值濾波去除干擾點(diǎn)
中值濾波的主要功能是讓周圍像素灰度值的差比較大的像素改取與周圍像素值相近的值,從而可以消除孤立的噪聲點(diǎn)。工作步驟為:
(1)將模板(3*3矩陣)在二值化圖中漫游,并將模板中心與圖中的某個(gè)像素位置重合;
(2)讀取模板下各對(duì)應(yīng)像素的灰度值(0或1);
(3)如果中心點(diǎn)為1,周圍四周為0,則將孤立亮點(diǎn)設(shè)為0(噪音)。
2.4 直方圖投影字符分割
圖像灰度級(jí)范圍為0,1,…,t-1,設(shè)灰度級(jí)i的像素?cái)?shù)為ni,則一副圖像的總像素N為:
N= (15)
灰度級(jí)出現(xiàn)的概率定義為
Pi= (16)
如果灰度級(jí)直方圖出現(xiàn)明顯的雙峰狀,則選取兩峰之間的谷底所對(duì)應(yīng)的灰度級(jí)作為閥值。
2.5 樣本訓(xùn)練和識(shí)別
Tesseract的OCR開源引擎是業(yè)內(nèi)最準(zhǔn)確的三款識(shí)別引擎之一,具有豐富的公共識(shí)別庫,也可根據(jù)需要進(jìn)行個(gè)人樣本庫的建設(shè)。
同時(shí)支持java、.NET、PHP、Python等主流語言都有相應(yīng)的封裝類庫。識(shí)別的主要C#代碼如下:
using OCR.TesseractWrapper;
using (Bitmap bitmap = (Bitmap)Image.FromFile(file))
TesseractProcessor processor = new TesseractProcessor();
processor.Init();
string result=processor.Recognize(newBitmap);
3 結(jié)束語
通過對(duì)某些論壇驗(yàn)證碼進(jìn)行試驗(yàn)測試,發(fā)現(xiàn)對(duì)相對(duì)簡單驗(yàn)證碼識(shí)別率高達(dá)95%以上;對(duì)一些字符粘連、動(dòng)態(tài)變化的驗(yàn)證碼,識(shí)別率很低,因此在識(shí)別前應(yīng)對(duì)圖片進(jìn)行特殊的處理。同時(shí)建議對(duì)系統(tǒng)安全性要求高的網(wǎng)站驗(yàn)證碼多加入一些識(shí)別率低的噪音如中文,適度旋轉(zhuǎn),粘連,動(dòng)態(tài)變化等內(nèi)容,以此提高網(wǎng)站的防護(hù)能力。
參考文獻(xiàn)
[1]Rafael C.Gonzalez,Richard E.Woods.數(shù)字圖像處理(第三版)[M].北京:電子工業(yè)出版社,2011.
[2]劉直芳,王運(yùn)瓊,朱敏.數(shù)字圖像處理與分析[M].北京:清華大學(xué)出版社,2006.
[3]Gary Bradski,Adrian Kaehler.Learning OpenCV[M].南京:東南大學(xué)出版社,2009.
[4]盛驟,謝式千,潘承毅.概率論和數(shù)理統(tǒng)計(jì)[M].北京:高等教育出版社,2000.
[5]Watson·K.,Nagel·C,齊立波翻譯.C#入門經(jīng)典[M].北京:清華大學(xué)出版社,2006.
作者簡介
聞宏強(qiáng)(1987-),男,浙江建德市人。大學(xué)本科學(xué)歷?,F(xiàn)為浙江省電子信息產(chǎn)品檢驗(yàn)所軟件評(píng)測中心助理工程師。主要研究方向?yàn)樾畔踩?/p>
作者單位
浙江省電子信息產(chǎn)品檢驗(yàn)所 軟件評(píng)測中心 浙江省杭州市 310007endprint