王平根
(井岡山大學電子與信息工程學院,江西 吉安343009)
基于Java的圖形驗證碼設計與實現
王平根
(井岡山大學電子與信息工程學院,江西 吉安343009)
本文簡單介紹了圖形驗證碼的應用,詳細描述了Java圖形驗證碼的設計原理和實現方法,同時,以數字和字母混合圖形驗證碼為例給出了程序段及驗證圖片。
圖形驗證碼;Java Web;安全
驗證碼的應用十分普遍。驗證碼一般是防止批量注冊的,人眼看起來都費勁。二像百度貼吧未登錄發貼要輸入驗證碼大概是防止大規模匿名回帖的發生;目前,不少網站為了防止用戶利用機器人自動注冊、登錄、灌水,都采用了驗證碼技術,在一般注冊用戶ID的地方以及各大論壇都要要輸入驗證碼;在購買火車票時為了減緩黃牛使用程序強票,購票前要輸入驗證碼;為防止程序惡意登錄,在登錄時要輸入驗證碼等等。所謂驗證碼,就是將一串隨機產生的數字或符號,生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由用戶肉眼識別其中的驗證碼信息,輸入表單提交網站驗證,驗證成功后才能使用某項功能。
驗證碼是一張圖片,圖片中有存有一些信息,該信息在后臺保留一份,且每次觸發一事件時,都會導致該圖片和后臺的信息同步更新。Java中就是在servlet中隨機生成一個指定位置的驗證碼,一般為四位,然后把該驗證碼保存到session中,在通過Java的繪圖類以圖片的形式輸出該驗證碼。該圖片上的信息通常較難識別,帶有干擾線,或一些扭曲的信息。該圖片是給用戶看的,并讓用戶識別圖片中的信息。用戶填寫正確的信息后,才能進行某些操作。我們之所以這樣做的原因是為了防止某些人員利用自己編寫的程序來對我們的系統進行一些破壞,因為程序是很難識別圖片中的信息的,特別是加了干擾信息的圖片,這就避免了一些外部程序對系統的破壞行為。
我們在Java中寫一個專門用于生成驗證碼的Servlet,該Servlet調用了java類庫中的BufferedImage和Graphics等一系列的類來生成圖片,圖片中的信息是通過生成隨機數的方式確定下來的,再將信息寫入到圖片中。接下來將輸入的信息通過保存在Session(會話對象)對象中,可以和前臺的數據進行比對。最后通過IO將生成的圖片寫回到客戶端,就是我們看到的驗證碼,如何確定驗證碼生成的位置,只要通過Html中的<img/>標簽的href屬性為Servlet的映射路徑,img標簽會應用到Servlet生成的圖片。
圖形驗證碼有很多類型,一般有數字的、字母的及數字和字母組合的驗證碼等等。本文只給出以數字和字母混合圖形驗證碼的程序段及驗證圖片,其它的不作介紹。值得說明的是要安裝好相應的運行軟件。程序片段和驗證圖片如下:
……
<title>數字字母混合驗證碼</title>
<!--<link rel="stylesheet"type="text/css"href="./styles.css">-->
</head>
<body>
${requestScope.loginmessage}
<br/>
<form action="/myhomework/login"method="post">
<br/> 請 輸 入 驗 證 碼 :<input type="text"name="
checkimage"> <img
src="/myhomework/image3"id="CheckCode"></img><a
href="#"
onclick="myReload()">點擊,換一個</a><br/>
</form>
</body>
……
驗證圖片:
基于安全性方面的考慮,大多數登錄時需要輸入一個驗證碼,這說明圖形驗證碼在應用中非常重要。在Java Web開發中,圖形驗證碼是普遍使用的一項技術。本文只介紹了 Java圖片驗證碼的一般原理和實現方法,大家通過編程,使用Java Web中的servlet以及Jcaptcha、Kaptcha兩種開源組件來實現各式各樣的驗證碼,使之應用更廣泛、更安全。
[1]李仲尉,王國輝,等.Java范例完全自學手冊[M].北京:人民郵電出版社,2009: 21-25.
[2]呂海東,張坤.ava EE企業級應用開發實例教程.北京:清華大學出版社,2010,9.
[3]潘勇.Java Web網站通用圖形驗證碼的實現[J].電腦編程技巧與維護,2012 (18).
[責任編輯:李書培]