Java實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼的示例代碼-創(chuàng)新互聯(lián)

最近滑動(dòng)驗(yàn)證碼在很多網(wǎng)站逐步流行起來(lái),一方面對(duì)用戶(hù)體驗(yàn)來(lái)說(shuō),比較新穎,操作簡(jiǎn)單,另一方面相對(duì)圖形驗(yàn)證碼來(lái)說(shuō),安全性并沒(méi)有很大的降低。當(dāng)然到目前為止,沒(méi)有絕對(duì)的安全驗(yàn)證,只是不斷增加攻擊者的繞過(guò)成本。

成都創(chuàng)新互聯(lián)公司自2013年起,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元寶坻做網(wǎng)站,已為上家服務(wù),為寶坻各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):028-86922220

接下來(lái)分析下滑動(dòng)驗(yàn)證碼的核心流程:

后端隨機(jī)生成摳圖和帶有摳圖陰影的背景圖片,后臺(tái)保存隨機(jī)摳圖位置坐標(biāo)


前端實(shí)現(xiàn)滑動(dòng)交互,將摳圖拼在摳圖陰影之上,獲取到用戶(hù)滑動(dòng)距離值,比如以下示例


前端將用戶(hù)滑動(dòng)距離值傳入后端,后端校驗(yàn)誤差是否在容許范圍內(nèi)。


這里單純校驗(yàn)用戶(hù)滑動(dòng)距離是最基本的校驗(yàn),出于更高的安全考慮,可能還會(huì)考慮用戶(hù)滑動(dòng)的整個(gè)軌跡,用戶(hù)在當(dāng)前頁(yè)面的訪(fǎng)問(wèn)行為等。這些可以很復(fù)雜,甚至借助到用戶(hù)行為數(shù)據(jù)分析模型,最終的目標(biāo)都是增加非法的模擬和繞過(guò)的難度。這些有機(jī)會(huì)可以再歸納總結(jié)常用到的方法,本文重點(diǎn)集中在如何基于Java來(lái)一步步實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼的生成。

可以看到,滑動(dòng)圖形驗(yàn)證碼,重要有兩個(gè)圖片組成,摳塊和帶有摳塊陰影的原圖,這里面有兩個(gè)重要特性保證被暴力破解的難度:摳塊的形狀隨機(jī)和摳塊所在原圖的位置隨機(jī)。這樣就可以在有限的圖集中制造出隨機(jī)的、無(wú)規(guī)律可尋的摳圖和原圖的配對(duì)。

用代碼如何從一張大圖中摳出一個(gè)有特定隨機(jī)形狀的小圖呢?

第一步,先確定一個(gè)摳出圖的輪廓,方便后續(xù)真正開(kāi)始執(zhí)行圖片處理操作

圖片是有像素組成,每個(gè)像素點(diǎn)對(duì)應(yīng)一種顏色,顏色可以用RGB形式表示,外加一個(gè)透明度,把一張圖理解成一個(gè)平面圖形,左上角為原點(diǎn),向右x軸,向下y軸,一個(gè)坐標(biāo)值對(duì)應(yīng)該位置像素點(diǎn)的顏色,這樣就可以把一張圖轉(zhuǎn)換成一個(gè)二維數(shù)組?;谶@個(gè)考慮,輪廓也用二維數(shù)組來(lái)表示,輪廓內(nèi)元素值為1,輪廓外元素值對(duì)應(yīng)0。

這時(shí)候就要想這個(gè)輪廓形狀怎么生成了。有坐標(biāo)系、有矩形、有圓形,沒(méi)錯(cuò),用到數(shù)學(xué)的圖形函數(shù)。典型用到一個(gè)圓的函數(shù)方程和矩形的邊線(xiàn)的函數(shù),類(lèi)似:

(x-a)²+(y-b)²=r²中,有三個(gè)參數(shù)a、b、r,即圓心坐標(biāo)為(a,b),半徑r。這些將摳圖放在上文描述的坐標(biāo)系上很容易就圖算出來(lái)具體的值。

示例代碼如下:

 private int[][] getBlockData() {
 int[][] data = new int[targetLength][targetWidth];
 double x2 = targetLength-circleR-2;
 //隨機(jī)生成圓的位置
 double h2 = circleR + Math.random() * (targetWidth-3*circleR-r1);
 double po = circleR*circleR;
 
 double xbegin = targetLength-circleR-r1;
 double ybegin = targetWidth-circleR-r1;
 
 for (int i = 0; i < targetLength; i++) {
  for (int j = 0; j < targetWidth; j++) {
  //右邊○
  double d3 = Math.pow(i - x2,2) + Math.pow(j - h2,2);
  
  if (d1 <= po
   || (j >= ybegin && d2 >= po)
   || (i >= xbegin && d3 >= po)
   ) {
   data[i][j] = 0;
   
  } else {
   data[i][j] = 1;
  }
  }
 }
 return data;
 }

網(wǎng)站題目:Java實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼的示例代碼-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://muchs.cn/article30/hejpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司外貿(mào)建站、網(wǎng)站改版網(wǎng)頁(yè)設(shè)計(jì)公司、搜索引擎優(yōu)化、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)