導航:首頁 > 編程語言 > 滑動驗證碼java

滑動驗證碼java

發布時間:2023-01-30 12:56:23

A. java怎麼實現驗證碼識別

圖片驗證碼是什麼
圖片驗證碼,這個大家應該都見過。最普遍的圖片驗證碼就是一張圖片上面有4-6個歪歪扭扭的數字字母,圖片還有點看不清楚,但是基本可以肉眼識別出上面的數字字母。那為什麼要有這個東東呢?

其實驗證碼的出現為了區分人與機器。對於歪歪妞妞還有點看不清的數字字母圖片,由於人腦的特殊構造,是可以完全無障礙識別的,但是想讓奇跡識別出這些字母數字,就會出現識別錯誤。那為什麼要區別人與機器呢?假如一個一個系統沒有驗證碼,我知道了你的用戶名,並且知道你的登錄密碼是8位的數字,那我完全可以寫個腳本程序窮舉出所有的8位數組合,挨個去嘗試登錄,這個過程對於人來說可能耗時耗力,但是對於程序來說,so easy。所以驗證碼的出現就會阻止程序進行這樣的窮舉登錄。

隨著技術的發展,現在很多的驗證碼系統都可以通過圖像處理、機器學習深度學習等方式進行攻破,圖片驗證碼已經不再安全,即使是非常有名的12306驗證碼,也已經被利用深度學習達到了很高的識別精度。所以也出現了手機驗證碼、拖動滑塊圖片到指定位置的驗證碼等各種驗證碼。

B. 往右劃的驗證碼,是在驗證什麼

目前滑動驗證碼的功能主要還是增加用戶的安全,驗證的是這是人為操作還是機器操作,防止一些不法分子利用自動程序惡意注冊登錄、暴力破解密碼以及批量操作(刷單、發帖)等行為。如果沒有驗證碼,暴力破解密碼後就可以直接登錄,相反,如果設置了驗證碼,程序很難識別,那麼就無法登錄成功。除此之外,還可以防止黑客惡意攻擊從而導致伺服器壓力太大而崩潰,比如論壇灌水、刷頁、刷票等,有些論壇回復需要輸入驗證碼就是出於這個目的。

3、根據上述收集到相關信息計算滑塊移動軌跡並模擬人移動滑塊的整個過程。

計算出了滑塊移動的軌跡圖,接下來就需要模擬人移動滑塊的過程。現在的滑動驗證碼識別安全性很高,絕大多數都加入了機器學習模型,也就是說,人在移動滑塊的時候不可能是勻速的。所以說,只是簡單的勻速滑動肯定是被認定為機器操作。因此模擬人拖動滑塊的過程中需要加入幾個過程,比如先加速,再減速,適當加入回退和隨機抖動,盡可能的模擬人的行為。滑動的過程可以通過在代碼中設置相應變數,再加上相應公式就可以解決,對於專業人員並不復雜。

C. Java如何實現驗證碼驗證功能

Java如何實現驗證碼驗證功能呢?日常生活中,驗證碼隨處可見,他可以在一定程度上保護賬號安全,那麼他是怎麼實現的呢?

Java實現驗證碼驗證功能其實非常簡單:用到了一個Graphics類在畫板上繪制字母,隨機選取一定數量的字母隨機生成,然後在畫板上隨機生成幾條干擾線。

首先,寫一個驗證碼生成幫助類,用來繪制隨機字母:

接著,創建一個servlet,用來固定圖片大小,以及處理驗證碼的使用場景,以及捕獲頁面生成的驗證碼(捕獲到的二維碼與用戶輸入的驗證碼一致才能通過)。

接著寫一個HTML注冊頁面用來檢驗一下:

效果如下圖:



當點擊刷新頁面的時候,驗證碼也會隨著變化,但我們看不清驗證碼時,只要點擊驗證碼就會刷新,這樣局部的刷新可以用JavaScript來實現。

在<img
src="/demo/verify/regist.do">中,添加一個問號和一串後綴數字,當刷新時讓後綴數字不斷改變,那麼形成的驗證碼也會不斷變化,我們可以採用的一種辦法是後綴數字用date代替,date獲取本機時間,時間是隨時變的,這樣就保證了刷新驗證碼可以隨時變化。

代碼如下:

如回答不詳細可追問

D. java怎麼開通簡訊驗證碼登錄功能

實現jiava簡訊驗證碼可以按下面的步奏進行:
1、首先,找到一個支持Java語言的介面簡訊平台。
2、接著下載介面文檔,和自己的開發平台進行對接。
3、注意在對接之前測試一下簡訊的速度,一旦對接好想換就比較麻煩,之前就吃過這個虧,最後有個朋友介紹我去簡訊網。
4、如果要購買的話,一定要多測試幾家。
如果在碰到有疑問的地方一定要和技術或者客服多多溝通。

E. 常用驗證碼之滑動驗證碼|圖形驗證碼

這里是常用驗證碼的第三篇—— 滑動/圖形驗證碼
在前兩篇已經實現了隨機驗證碼和算術驗證碼,感興趣的可以去看一下~

除了這兩種常用的驗證碼之外,現在最經常用到的還有幾種,比如滑動驗證,圖片驗證等,這一類的驗證碼一般藉助於第三方來處理即可。比如圖形驗證碼:

本篇紀錄兩種常用驗證碼的第三方調用方式:

人機驗證服務適用於登錄、注冊、活動、論壇、簡訊等高風險業務場景。

通過對用戶的行為數據、設備特徵與網路數據構建多維度數據分析,使用業界先進的風控引擎結合「規則+AI」模型,對風險設備使用、模擬行為、暴力重放等攻擊進行綜合實時風控判決。

為網頁、App、小程序開發者打造立體、全面的人機驗證,最大程度地保護注冊登錄、活動秒殺、點贊發帖、數據保護等各大場景下的業務安全。

F. JAVAWEB項目怎麼實現驗證碼

1、定義一個img指向後台服務
<img title="點擊刷新" src="${pageContext.request.contextPath}/aa/img" class="img_login_code"
onclick="this.src='${pageContext.request.contextPath}/aa/img?'+Math.random();" />
2、服務
@RequestMapping(value="/img")
public void admin(HttpServletRequest request,HttpServletResponse response) throws Exception {
.outputImage("captcha_admin",null,null, request, response,verifyCode);
}
3、幫助類
package team.tool;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.LinearGradientPaint;
import java.awt.Paint;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class VerifyCodeUtils{

//使用到Algerian字體,系統里沒有的話需要安裝字體,字體只顯示大寫,去掉了1,0,i,o幾個容易混淆的字元
public static final String VERIFY_CODES = "";
private static Random random = new Random();

/**
* 使用系統默認字元源生成驗證碼
* @param verifySize 驗證碼長度
* @return
*/
public static String generateVerifyCode(int verifySize){
return generateVerifyCode(verifySize, VERIFY_CODES);
}
/**
* 使用指定源生成驗證碼
* @param verifySize 驗證碼長度
* @param sources 驗證碼字元源
* @return
*/
public static String generateVerifyCode(int verifySize, String sources){
if(sources == null || sources.length() == 0){
sources = VERIFY_CODES;
}
int codesLen = sources.length();
Random rand = new Random(System.currentTimeMillis());
StringBuilder verifyCode = new StringBuilder(verifySize);
for(int i = 0; i < verifySize; i++){
verifyCode.append(sources.charAt(rand.nextInt(codesLen-1)));
}
return verifyCode.toString();
}

/**
* 生成隨機驗證碼文件,並返回驗證碼值
* @param w
* @param h
* @param outputFile
* @param verifySize
* @return
* @throws IOException
*/
public static String outputVerifyImage(int w, int h, File outputFile, int verifySize) throws IOException{
String verifyCode = generateVerifyCode(verifySize);
outputImage(w, h, outputFile, verifyCode);
return verifyCode;
}

/**
* 輸出隨機驗證碼圖片流,並返回驗證碼值
* @param w
* @param h
* @param os
* @param verifySize
* @return
* @throws IOException
*/
public static String outputVerifyImage(int w, int h, OutputStream os, int verifySize) throws IOException{
String verifyCode = generateVerifyCode(verifySize);
outputImage(w, h, os, verifyCode);
return verifyCode;
}

/**
* 生成指定驗證碼圖像文件
* @param w
* @param h
* @param outputFile
* @param code
* @throws IOException
*/
public static void outputImage(int w, int h, File outputFile, String code) throws IOException{
if(outputFile == null){
return;
}
File dir = outputFile.getParentFile();
if(!dir.exists()){
dir.mkdirs();
}
try{
outputFile.createNewFile();
FileOutputStream fos = new FileOutputStream(outputFile);
outputImage(w, h, fos, code);
fos.close();
} catch(IOException e){
throw e;
}
}

/**
* 輸出指定驗證碼圖片流
* @param w
* @param h
* @param os
* @param code
* @throws IOException
*/
public static void outputImage(int w, int h, OutputStream os, String code) throws IOException{
int verifySize = code.length();
BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Random rand = new Random();
Graphics2D g2 = image.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
Color[] colors = new Color[5];
Color[] colorSpaces = new Color[] { Color.WHITE, Color.CYAN,
Color.GRAY, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE,
Color.PINK, Color.YELLOW };
float[] fractions = new float[colors.length];
for(int i = 0; i < colors.length; i++){
colors[i] = colorSpaces[rand.nextInt(colorSpaces.length)];
fractions[i] = rand.nextFloat();
}
Arrays.sort(fractions);

g2.setColor(Color.GRAY);// 設置邊框色
g2.fillRect(0, 0, w, h);

Color c = getRandColor(200, 250);
g2.setColor(c);// 設置背景色
g2.fillRect(0, 2, w, h-4);

//繪制干擾線
Random random = new Random();
g2.setColor(getRandColor(160, 200));// 設置線條的顏色
for (int i = 0; i < 20; i++) {
int x = random.nextInt(w - 1);
int y = random.nextInt(h - 1);
int xl = random.nextInt(6) + 1;
int yl = random.nextInt(12) + 1;
g2.drawLine(x, y, x + xl + 40, y + yl + 20);
}

// 添加噪點
float yawpRate = 0.05f;// 雜訊率
int area = (int) (yawpRate * w * h);
for (int i = 0; i < area; i++) {
int x = random.nextInt(w);
int y = random.nextInt(h);
int rgb = getRandomIntColor();
image.setRGB(x, y, rgb);
}

shear(g2, w, h, c);// 使圖片扭曲

g2.setColor(getRandColor(100, 160));
int fontSize = h-4;
Font font = new Font("Algerian", Font.ITALIC, fontSize);
g2.setFont(font);
char[] chars = code.toCharArray();
for(int i = 0; i < verifySize; i++){
AffineTransform affine = new AffineTransform();
affine.setToRotation(Math.PI / 4 * rand.nextDouble() * (rand.nextBoolean() ? 1 : -1), (w / verifySize) * i + fontSize/2, h/2);
g2.setTransform(affine);
g2.drawChars(chars, i, 1, ((w-10) / verifySize) * i + 5, h/2 + fontSize/2 - 10);
}

g2.dispose();
ImageIO.write(image, "jpg", os);
}

/**
* 輸出指定驗證碼圖片流
* @param w
* @param h
* @param os
* @param code
* @throws IOException
*/
public static void outputImage(String key ,Integer w, Integer h, HttpServletRequest request, HttpServletResponse response, String code) throws IOException{
int verifySize = code.length();
w = w==null?80:w;
h = h==null?30:h;
BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
request.getSession().setAttribute(key, code);
Random rand = new Random();
Graphics2D g2 = image.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
Color[] colors = new Color[5];
Color[] colorSpaces = new Color[] { Color.WHITE, Color.CYAN,
Color.GRAY, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE,
Color.PINK, Color.YELLOW };
float[] fractions = new float[colors.length];
for(int i = 0; i < colors.length; i++){
colors[i] = colorSpaces[rand.nextInt(colorSpaces.length)];
fractions[i] = rand.nextFloat();
}
Arrays.sort(fractions);

g2.setColor(Color.GRAY);// 設置邊框色
g2.fillRect(0, 0, w, h);

Color c = getRandColor(200, 250);
g2.setColor(c);// 設置背景色
g2.fillRect(0, 2, w, h-4);

//繪制干擾線
Random random = new Random();
g2.setColor(getRandColor(160, 200));// 設置線條的顏色
for (int i = 0; i < 20; i++) {
int x = random.nextInt(w - 1);
int y = random.nextInt(h - 1);
int xl = random.nextInt(6) + 1;
int yl = random.nextInt(12) + 1;
g2.drawLine(x, y, x + xl + 40, y + yl + 20);
}

// 添加噪點
float yawpRate = 0.05f;// 雜訊率
int area = (int) (yawpRate * w * h);
for (int i = 0; i < area; i++) {
int x = random.nextInt(w);
int y = random.nextInt(h);
int rgb = getRandomIntColor();
image.setRGB(x, y, rgb);
}

shear(g2, w, h, c);// 使圖片扭曲

g2.setColor(getRandColor(100, 160));
int fontSize = h-4;
Font font = new Font("Algerian", Font.ITALIC, fontSize);
g2.setFont(font);
char[] chars = code.toCharArray();
for(int i = 0; i < verifySize; i++){
AffineTransform affine = new AffineTransform();
affine.setToRotation(Math.PI / 4 * rand.nextDouble() * (rand.nextBoolean() ? 1 : -1), (w / verifySize) * i + fontSize/2, h/2);
g2.setTransform(affine);
g2.drawChars(chars, i, 1, ((w-10) / verifySize) * i + 5, h/2 + fontSize/2 - 10);
}

g2.dispose();
// 轉成JPEG格式
ServletOutputStream out = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
}

private static Color getRandColor(int fc, int bc) {
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}

private static int getRandomIntColor() {
int[] rgb = getRandomRgb();
int color = 0;
for (int c : rgb) {
color = color << 8;
color = color | c;
}
return color;
}

private static int[] getRandomRgb() {
int[] rgb = new int[3];
for (int i = 0; i < 3; i++) {
rgb[i] = random.nextInt(255);
}
return rgb;
}

private static void shear(Graphics g, int w1, int h1, Color color) {
shearX(g, w1, h1, color);
shearY(g, w1, h1, color);
}

private static void shearX(Graphics g, int w1, int h1, Color color) {

int period = random.nextInt(2);

boolean borderGap = true;
int frames = 1;
int phase = random.nextInt(2);

for (int i = 0; i < h1; i++) {
double d = (double) (period >> 1)
* Math.sin((double) i / (double) period
+ (6.2831853071795862D * (double) phase)
/ (double) frames);
g.Area(0, i, w1, 1, (int) d, 0);
if (borderGap) {
g.setColor(color);
g.drawLine((int) d, i, 0, i);
g.drawLine((int) d + w1, i, w1, i);
}
}

}

private static void shearY(Graphics g, int w1, int h1, Color color) {

int period = random.nextInt(40) + 10; // 50;

boolean borderGap = true;
int frames = 20;
int phase = 7;
for (int i = 0; i < w1; i++) {
double d = (double) (period >> 1)
* Math.sin((double) i / (double) period
+ (6.2831853071795862D * (double) phase)
/ (double) frames);
g.Area(i, 0, 1, h1, 0, (int) d);
if (borderGap) {
g.setColor(color);
g.drawLine(i, (int) d, i, 0);
g.drawLine(i, (int) d + h1, i, h1);
}

}

}
public static void main(String[] args) throws IOException{
File dir = new File("F:/verifies");
int w = 200, h = 80;
for(int i = 0; i < 50; i++){
String verifyCode = generateVerifyCode(4);
File file = new File(dir, verifyCode + ".jpg");
outputImage(w, h, file, verifyCode);
}
}
}

閱讀全文

與滑動驗證碼java相關的資料

熱點內容
龍江網路配置什麼路由器 瀏覽:169
如何使用指標導入數據 瀏覽:866
平時用什麼app看nba 瀏覽:503
win10想以管理員身份運行bat文件 瀏覽:85
合並單元格中的其他數據如何排序 瀏覽:331
電腦窗口程序在哪 瀏覽:281
前女友把我微信刪了又加什麼意思 瀏覽:655
win10不識別無線xboxone手柄 瀏覽:403
汽車之家app怎麼看成交價 瀏覽:908
abc文件破解密碼 瀏覽:516
怎麼登錄米家app賬號 瀏覽:165
兆歐表多少轉讀數據 瀏覽:414
多媒體網路通訊 瀏覽:747
文件上的表填不了內容該怎麼辦 瀏覽:899
弟弟迷上網路小說怎麼辦 瀏覽:766
網路上有人想訪問我的地址怎麼辦 瀏覽:730
linux解壓zip亂碼 瀏覽:839
看直播數據用哪個平台最好 瀏覽:730
win10晶元驅動程序版本 瀏覽:763
如何給word添加公式編輯器 瀏覽:666

友情鏈接