驗證碼的實現

在實際開發各類應用管理系統的時候,應當考慮到系統的安全性,爲了防止非法用戶採起窮舉法在線***,應當在登陸模塊採用了驗證碼手段。該模塊主要設計思想是:用圖片格式顯示隨機碼,即在服務器端經過程序將隨機產生的驗證碼字符畫在帶有干擾點的背景圖片上,把該圖片放置在網頁上,在客戶端顯示出來的是一幅帶有干擾因素的圖片;另外一方面,在服務器端準備好幾張背景圖片,這些背景圖片的格式、顏色、花紋等干擾方式各不相同,每次隨機抽取其中一幅做爲背景,這樣就加大了經過工具來解讀圖片上字符的難度,從而在必定程度上提升安全。驗證碼的程序實現過程:java


(1)文件結構
所有源程序共包括三個文件:
Checkcode.java:這是一個Servlet服務器端腳本,集成了生成隨機數、繪製驗證碼、添加干擾點等方法。將整個實現邏輯封裝在服務器端,主要是從安全性的角度考慮。
Denglu.jsp:這也是一個JSP腳本,它將調用Checkcode.java產生的驗證碼圖片顯示在客戶端。
Jiancha.jsp:這是一個JSP腳本,用於檢查用戶輸入的驗證碼。安全


(2)程序流程
用戶請求Denglu.jsp頁面時,服務器調用Checkcode.java的getRandomO方法,產生4位數字和字母混合的隨機字符串。
Public String getRandom0{
Char[]str={‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘0’,‘a’,‘b’,‘C’,‘d’,'e',‘f’,‘g’,‘h’,‘i’,'j',‘k’,‘l’,‘m’,‘n’,
‘o’,‘P’,‘q’,'r','s','t',‘U’,‘v’,‘W’,‘X’,‘Y’,‘z’);
For(int i=0;i<4;i++){
int j=random.nextInt(36);
c[i]=str[j];服務器

}
return string.Valueof(c[0])+string.valueOf(c[1])+string.valueOf(c[2])+string.valueOf(c[3]);
} session


服務器執行Servlet的doGetO方法,將隨機字符串繪製在背景圖片上。
Sting Codel=request.getParameter("Checkcode");//取Denglu.jsp傳遞的參數
Response.setcontentType("p_w_picpath/jpeg");
Response.setheader("Cache—control","no—store");
servletOutputStream outpic=response.getOutputstream();
Inputstrem picname=new FileInputStream(new file("e:/pic01.jpg"));//取背景圖片
JPEGImagedecode playcoder=JPEGCodec.ceateJPEGDecoder(picname);//創建JPEG×××
Bufferedlmage Bufpic=decoder.decodeAsBufferedlmage();//生成緩衝圖像
Graphics gra=BufImage.getCraphics();//取圖形上下文dom

gra.setColor(new color(O,0,0));//設置字符串顏色
gra.setFont(new Font("Times New Roman",Font.ITALIC,24));//設置字體
gra.drawstring(Codel,10,25);//寫入隨機字符串對隨機圖片添加干擾點,防止掃描識別
Random ranl=new Random();//隨機產生400個干擾點(背景圖片大小120*60)
For(int i=O;i<400;i++){
int x=random.nextInt(120);
int y=random.nextInt(60);
gra.setcolor(new color.grean);
gra.drawLine(x,y,x+1,y+1);
}jsp

將處理好的緩衝圖像從新編碼爲JPEG輸出
JPEGImageEncode
outcode=JPEGCodec.createJPEGEncoder(picname);
outcode.encode(bufpic);
picname.close();ide


而後把生成的驗證碼做爲session變量寫入,所以在接收登陸頁面輸入的數據頁面中,可用用戶輸入的驗證碼和這個session變量做比較,若是相同則表示驗證經過。工具

相關文章
相關標籤/搜索