圖片認證碼
A. 認證信息里的附加碼,圖片認證和數字認證有什麼區別
都一樣 是為了防止惡意軟體注冊的 有的人眼都很難分辨出來 軟體就無法識別了
B. 如何獲取驗證碼圖片
不知道LZ你是使用Java的編程語言還是其他的,我這里講講Java的實現方式。。。 B/S方式的驗證碼圖片生成可以使用Servlet的方式。。。 package cn.com.CCB.moles.security; import javax.servlet.http.*; import java.io.*; import java.util.*; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; @SuppressWarnings("serial") public class Image extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws IOException { String randStr = "1,2,3,A,B,4,5,6,X,Y,Z,7,8,P,Q,R,9,C,D,E,F,G,H,I,J,K,L,M,N,S,T,U,W"; String[] randList = randStr.split(","); response.setContentType("image/jpeg"); // 必須設置ContentType為image/jpeg // 設置頁面不緩存 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); // 在內存中創建圖象 int width = 80, height = 20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 獲取圖形上下文 Graphics g = image.getGraphics(); // 生成隨機類 Random random = new Random(); // 設定背景色 g.setColor(getRandColor(200, 250)); // g.setColor(new Color(204, 204, 204)); g.fillRect(0, 0, width, height); // 設定字體 g.setFont(new Font("Times New Roman", Font.BOLD, 16)); // 隨機產生155條干擾線,使圖象中的認證碼不易被其它程序探測到 g.setColor(getRandColor(160, 200)); for (int i = 0; i < 155; i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); g.drawLine(x, y, x + xl, y + yl); } // 取隨機產生的認證碼(4位數字字元的混合字元串) String sRand = ""; for (int i = 0; i < 4; i++) { String rand = randList[Math.round((randList.length - 1) * random.nextFloat())]; sRand += rand; // 將認證碼顯示到圖象中 // g.setColor(new Color(20 + random.nextInt(110), 20 + // random.nextInt(110), 20 + random.nextInt(110))); // //調用函數出來的顏色相同,可能是因為種子太接近,所以只能直接生成 g.setColor(new Color(0, 0, 0)); g.drawString(rand, 18 * i + 8, 16); } HttpSession session = request.getSession(); session.setAttribute("checkCode", sRand); try { ImageIO.write(image, "JPEG", response.getOutputStream()); } catch (Exception ex) { ex.printStackTrace(); } } private Color getRandColor(int fc, int bc) { // 給定范圍獲得隨機顏色 Random random = new Random(); 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); } } 這樣你就可以在頁面上顯示圖片的地方寫上連接地址,也就是Servlet的訪問地址,同時別忘記了web.xml文件中對這個Servlet配置。。。
C. 圖片保護首發認證碼是什麼
給寶貝的主圖加上圖盾,當其他賣家盜用你的加過圖盾的圖片時,淘寶會提示他整改,否則會刪除他的寶貝鏈接
D. JAVA識別圖片驗證碼
package com.he;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
public class CodeFact
extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
//設置頁面不緩存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 在內存中創建圖象
int width = 60, height = 20;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 獲取圖形上下文
Graphics g = image.getGraphics();
//生成隨機類
Random random = new Random();
// 設定背景色
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, height);
//設定字體
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
//畫邊框
g.setColor(new Color(33,66,99));
g.drawRect(0,0,width-1,height-1);
// 隨機產生155條干擾線,使圖象中的認證碼不易被其它程序探測到
g.setColor(getRandColor(160, 200));
for (int i = 0; i < 155; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x, y, x + xl, y + yl);
}
// 取隨機產生的認證碼(4位數字)
String sRand = "";
for (int i = 0; i < 4; i++) {
String rand = String.valueOf(random.nextInt(10));
sRand += rand;
// 將認證碼顯示到圖象中
g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110),
20 + random.nextInt(110))); //調用函數出來的顏色相同,可能是因為種子太接近,所以只能直接生成
g.drawString(rand, 13 * i + 6, 16);
}
// 將認證碼存入SESSION
HttpSession session = request.getSession();
session.setAttribute("rand", sRand);
// 圖象生效
g.dispose();
// 輸出圖象到頁面
ImageIO.write(image, "JPEG", response.getOutputStream());
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
doGet(request, response);
}
//給定范圍獲得隨機顏色
private Color getRandColor(int fc, int bc) {
Random random = new Random();
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);
}
}
你試試!!
E. jsp圖片驗證碼
jsp生成圖片驗證碼的完整例子如下:
<%@ page contentType="image/jpeg" import="java.awt.*,
java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!
Color getRandColor(int fc,int bc)
{
Random random = new Random();
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);
}
%>
<%
out.clear();//這句針對resin伺服器,如果是tomacat可以不要這句
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandColor(200,250));
g.fillRect(0, 0, width, height);
g.setFont(new Font("Times New Roman",Font.PLAIN,18));
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
String sRand="";
for (int i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(rand,13*i+6,16);
}
// 將認證碼存入SESSION
session.setAttribute("rand",sRand);
g.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
%>
F. 什麼是圖片驗證碼
驗證碼的功能一般是防止使用程序惡意注冊、暴力破解或批量發帖而設置的。所謂驗證碼,就是將一串隨機產生的數字或符號,生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由用戶肉眼識別其中的驗證碼信息,輸入表單提交網站驗證,驗證成功後才能使用某項功能。學習驗證碼的破解/識別技術,不僅可以知道驗證碼的原理,而且可以讓你知道怎樣才能防止驗證碼被破解。
最常見的驗證碼主要有以下幾種:
1、四位數字,隨機的一數字字元串,最原始的驗證碼,驗證作用幾乎為零。
2、隨機數字圖片驗證碼。圖片上的字元比較中規中矩,有的可能加入一些隨機干擾素,還有一些是隨機字元顏色,驗證作用比上一個好。沒有基本圖形圖像學知識的人,不可破!
3、各種圖片格式的隨機數字+隨機大寫英文字母+隨機干擾像素+隨機位置。
4、漢字是注冊目前最新的驗證碼,隨機生成,打起來更難了,影響用戶體驗,所以,一般應用的比較少。
G. 驗證碼圖片製作
隨機圖片驗證碼的製作
以前寫的一個生成彩色驗證碼的例子。重載了makeCode()函數,即可以生成本地圖片,又可生成基於輸出流的圖片。
package smart.gui.util;
。。。
public class ColoredCodeMaker {
private final static String letterCollection =
"";
private String randomStr = "";
private RenderedImage renderedImg = null;
public ColoredCodeMaker(int width, int height, int letterCount) {
init(letterCount);
makeRenderedImage(width, height);
}
public String makeCode(OutputStream os) {
String formatName = "JPEG";
try {
ImageIO.write(this.renderedImg, formatName, os);
}
catch (Exception ex) {
return "";
}
return randomStr;
}
public String makeCode(File outputFileName) {
String formatName = "JPEG";
try {
ImageIO.write(this.renderedImg, formatName, outputFileName);
}
catch (Exception ex) {
return "";
}
return randomStr;
}
private void makeRenderedImage(int width, int height) {
if (width <= 0) {
width = 60;
}
if (height <= 20) {
height = 20;
}
/**
* TYPE_INT_RGB Represents an image with 8-bit RGB color components packed into integer pixels.
* The image has a DirectColorModel without alpha.
*/
BufferedImage bufImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
/**
* 獲取圖形上下文
*/
Graphics g = bufImage.createGraphics();
/**
* 設置背景色
*/
g.setColor(new Color(0xDCDCDC));
g.fillRect(0, 0, width, height);
/**
* 畫邊框
*/
g.setColor(Color.black);
g.drawRect(0,0,width-1,height-1);
/**
* 將認證碼顯示到圖像中
*/
g.setColor(Color.black);
g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));
for (int i = 0; i < randomStr.length(); i++) {
g.drawString(randomStr.charAt(i)+"", width/(randomStr.length()+2)*(i+1), height/2 + 10);
}
Random random = new Random();
for (int i = 0; i < width/2; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
g.drawOval(x,y,1,1);
}
g.dispose();
this.renderedImg = bufImage;
}
private void init(int letterCount) {
if (randomStr.length() != letterCount) {
randomStr = "";
for (int i = 0; i < letterCount; i++) {
randomStr +=
letterCollection.charAt( (int) (letterCollection.length() *
Math.random()));
}
}
}
}
////////測試代碼,圖片寬150,高40,圖片上共8個隨機字元,保存在C盤下
ColoredCodeMaker ccm = new ColoredCodeMaker(150,40,8);
ccm.makeCode(new java.io.File("C:\\aaa.jpeg"));
----------------------------------------------------------------------------------------------------------------------------------------------用VB製作驗證碼生成器
演算法設計
1.窗體設計
啟動VB6並新建一個標准EXE工程,布置好控制項並設置好名稱。
接著將兩個圖片框的AutoRedraw屬性設置成True,txt_inp、cmd_browse的Enabled屬性設置為False,txt_inp的Maxlength屬性設置成10。然後單擊「工程→部件」,勾選「Microsoft CommonDialog Control 6.0」。
2.演算法
加密過程是程序的重點。在這里我們運用畫線和畫點函數來處理圖片,在圖片框上隨機選兩個點畫直線,同時用隨機函數確定它的顏色;再隨機點一個點,同樣用隨機函數確定它的顏色。在這里我們還用隨機取字體樣式和背景色,不過要注意的是,背景和字體顏色的差別要搞大一些,由於每個RBG分量值越大顏色越深,因此我們用下面兩條語句就可以增強顏色的對比度:
pic_las.ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
pic_las.BackColor = RGB(Rnd * 55, Rnd * 55, Rnd * 55)
繪制圖像的具體的代碼如下:
Sub AddPas()
On Error GoTo Err1
pic_las.Print Space(10 - Len(Result)); Result
Dim x, y, x1, x2, i As Integer
'隨機決定輸出字體樣式
pic_las.FontItalic = Int(Rnd * 2)
pic_las.FontUnderline = Int(Rnd * 2)
pic_las.ForeColor = RGB(Rnd * 155 + 100, Rnd * 155 + 100, Rnd * 155 + 100)
'為驗證碼添加隨機直線
For i = 1 To (Int(Rnd(1) * 8) + 1)
x = Int(Rnd * pic_las.Width): y = Int(Rnd * pic_las.Height)
x1 = Int(Rnd * pic_las.Width): Y1 = Int(Rnd * pic_las.Height)
pic_las.Line (x, y)-(x1, Y1), RGB(Rnd * 255, Rnd * 255, Rnd * 255)
Next i
'為驗證碼隨機添加圓點
For i = 1 To (Int(Rnd(1) * 200) + 100)
pic_las.PSet (pic_las.Width * Rnd, pic_las.Height * Rnd), _
RGB(Rnd * 255, Rnd * 255, Rnd * 255)
Next i
'寫入輸出文件
If chk_file.Value = 1 Then
SavePicture pic_las.Image, txt_outfile.Text
MsgBox "驗證碼已經保存在:" & txt_outfile.Text, VBInformation
End If
Exit Sub
Err1: '產生了錯誤
MsgBox Err.Number & ":" & Err.Description, VBExclamation
End Sub
內容處理好了,接下來就只要簡單響應用戶的操作即可。在這里我們還需要解決隨機生成驗證碼的問題,我們可以把需要生成的驗證碼每一位都放入一個字元串,再用隨機函數以及字元串截取函數Mid(String,Start As Long,[Length])讀入每一位驗證碼。另外為了增強程序的功能,我還允許用戶保存和拷貝驗證碼以及允許用戶自行定義驗證碼。由於版面有限,這里就不給出完整的源程序了,你可以從http://www.cfan.com.cn/11program/200513/VBpass.zip下載到完整的源代碼。
總結
運行一下程序,「加密」效果還不錯吧。
這可不是一般的破解機器能識別得了的哦!當然你也可以將這個加密演算法運用到你個人的程序和論壇上去,它為程序的安全性提供了很好的保證呢!
H. 微信公眾賬號商戶認證里的填寫圖片驗證碼在哪裡獲取
網速問題沒有刷新出來吧
I. 手機如何輸入圖片驗證碼
請問你是哪個軟體遇到的哪種圖形驗證碼不會輸入呢?
我目前遇到的驗證碼有如下幾種:
1,大小寫字母和數字組合,在旁邊的文本框中輸入答案即可;
2,漢字,在旁邊的文本框中輸入答案即可;
3,數學題,如:1+貳=?在旁邊的文本框中輸入答案 3 即可;
4,選擇題,如:葡萄藤結是蘋果還是葡萄(2個字)?在旁邊的文本框中輸入答案 葡萄 即可;
5,多選題,如:12306訂票網站的,這種是將每一個答案點一下即可;
6,給出幾個字和一句話,需要用滑鼠拖動的方式使其跟幾個字重疊度達到一定比例時通過(這種目前不多見,忘記在哪用過了,找著了再補充);
7,語音驗證碼,將聽到的驗證碼輸入即可(這種目前也不多見,忘記在哪用過了,找著了再補充)。
(9)圖片認證碼擴展閱讀:
1.驗證碼一般是防止批量注冊的,人眼看起來都費勁,何況是機器。
2.一般注冊用戶ID的地方以及各大論壇都要輸入驗證碼。
3.常見的驗證碼:
1)四位數字和字母,可能都是字母,也可能都是數字,隨機的4位字元串,最原始的驗證碼,驗證作用幾乎為零。CSDN網站用戶登錄用的是GIF格式,常用的隨機數字圖片驗證碼。圖片上的字元比較中規中矩,驗證作用比上一個好。
(2)漢字是注冊目前最新的驗證碼,隨機生成,打起來比較難,例如QQ申訴頁面。
(3)MS的hotmail申請時候的是BMP格式, 隨機數字+隨機大寫英文字母+隨機干擾像素+隨機位置。
(4)韓文或日文,現在跑跑HF上MS注冊要打韓文,增加了難度。
(5)Google的Gmail注冊時候的是JPG格式,隨機英文字母+隨機顏色+隨機位置+隨機長度。
(6)其他各大論壇的是XBM格式,內容隨機。
(7)廣告驗證碼:輸入廣告中的部分內容即可,特點是可以給網站帶來額外收入,也可以使使用者耳目一新。
(8)問題驗證碼:問題驗證碼主要是以問答式的形式來進行填寫。它的查看比加模驗證碼更容易辨別和錄入,系統可以生成諸如「1+2=?」的問題讓用戶進行回答,當然這樣的問題是隨機生成的。另一種問題驗證碼,則是文字式的問題驗證碼,諸如生成問題「中國的全稱是什麼?」,當然有些網站還在問題後面給出了提示答案或直接答案。
J. 應如何獲取圖片驗證碼的地址
JAVA<%@ page contentType="image/jpeg" import="java.awt.*, java.awt.image.*,java.util.*,javax.imageio.*" %> <% // 在內存中創建圖象 int width=60, height=20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 獲取圖形上下文 Graphics g = image.getGraphics(); // 設定背景色 g.setColor(new Color(0xDCDCDC)); g.fillRect(0, 0, width, height); //畫邊框 g.setColor(Color.black); g.drawRect(0,0,width-1,height-1); // 取隨機產生的認證碼(4位數字) String rand = request.getParameter("rand"); rand = rand.substring(0,rand.indexOf(".")); switch(rand.length()) { case 1: rand = "000"+rand; break; case 2: rand = "00"+rand; break; case 3: rand = "0"+rand; break; default: rand = rand.substring(0,4); break; } // 將認證碼存入SESSION session.setAttribute("rand",rand); // 將認證碼顯示到圖象中 g.setColor(Color.black); Integer tempNumber = new Integer(rand); String numberStr = tempNumber.toString(); g.setFont(new Font("Atlantic Inline",Font.PLAIN,18)); String Str = numberStr.substring(0,1); g.drawString(Str,8,17); Str = numberStr.substring(1,2); g.drawString(Str,20,15); Str = numberStr.substring(2,3); g.drawString(Str,35,18); Str = numberStr.substring(3,4); g.drawString(Str,45,15); // 隨機產生88個干擾點,使圖象中的認證碼不易被其它程序探測到 Random random = new Random(); for (int i=0;i<20;i++) { int x = random.nextInt(width); int y = random.nextInt(height); g.drawOval(x,y,0,0); } // 圖象生效 g.dispose(); // 輸出圖象到頁面 ImageIO.write(image, "JPEG", response.getOutputStream()); %>