網絡上有很多上網賬號,都帶有一定安全性,爲什麼呢?登陸的時候爲什麼要寫用戶名,密碼,但是爲什麼登陸銀行賬號等涉及機密的賬號時,都需要驗證碼呢?
懂得編程的人都知道正常情況下截取他人的登陸密碼是一件非常輕而易舉 的事,但是有什麼方法能防止他人盜用密碼呢?對了,就是用驗證碼。
驗證碼真的能防止他人盜取賬號及密碼嗎?現在我告訴你,真的可以。
爲什麼驗證碼能防止別人盜用賬號及密碼呢?這是由於驗證碼採用的是圖片的形式來繪製的。在圖片上面加上隨機的驗證碼時,在驗證的時候,不是把驗證碼傳到控制器,而是將圖片傳到控制器,這時候,在控制器端,只需要驗證用戶名和密碼和圖片,也就是說,控制端獲取到的是圖片的對象,而驗證碼等都是難以獲取的。如果驗證的圖片上再加上刪除條紋等,安全係數就更高了。
下面我來做一個簡單的驗證碼的實現。
步驟:
1、建立一個html登陸界面,我做的比較簡單,代碼:
<html>
<head>
<title>Login.html</title>
<meta name="keywords" content="keyword1,keyword2,keyword3">
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
<script type="text/javascript">
function getImg(){
var img=document.getElementById("img");
img.src="/servlet/ServletResponseCheckCode?date="+new Date();
}
</script>
</head>
<body>
<form action="" method="post">
用戶名:<input type="text" name="user"><br>
密碼:<input type="password" name="pwd"><br>
輸入驗證碼:<input type="text"><br/> <img alt="換一張" src="/servlet/ServletResponseCheckCode" id="img" οnclick="getImg()"><a href="javascript:void(0)" οnclick="getImg()">看不清,換一張</a>
<img alt="" src="/photo_02.jpg">
</form>
</body>
</html>
2、建立一個servlet,在doGet方法裏面繪製圖片驗證碼
a.獲取圖片緩衝區
b.通過圖片緩衝區獲取畫筆
c.繪製圖片邊框、背景等
d.繪製隨機數字或者文字
e.通過圖片流將圖片寫入到頁面中
關鍵代碼如下:
int width=120;
int height=20;
//獲取圖片緩存區
BufferedImage bufferedImage=new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
//獲取畫筆工具
Graphics g=bufferedImage.getGraphics();
//設置畫筆顏色
g.setColor(Color.red);
//畫出矩形框
g.drawRect(0, 0, width, height);
//繪製背景
g.setColor(Color.green);
g.fillRect(1, 1, width-1, height-1);
//產生隨機數
Random r=new Random();
g.setColor(Color.red);
for(int x=0;x<4;x++){
g.drawString(r.nextInt(10)+"",20+x*20, 16); }
//創建ImageIO對象
ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
大功告成,一個簡單的驗證碼就完成了,如果在狠一點點,加上些刪除線,保證你是玉皇大帝,也無法破解這個驗證碼。安全係數絕對高