码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA代码生成验证码

时间:2015-05-08 20:13:09      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

验证码的作用:

因为你的WEB站有时会碰到客户机恶意攻击,其中一种很常见的攻击手段就是身份欺骗_它通过在客户端脚本写入一些代码,然后利用其,客户机在网站,论坛反复登陆,或者攻击者创建一个HTML窗体,其窗体如果包含了你注册窗体或发帖窗体等相同的字段,然后利用"http-post"传输数据到服务器,服务器会执行相应的创建帐户,提交垃圾数据等操作,如果服务器本身不能有效验证并拒绝此非法操作,它会很严重耗费其系统资源,降低网站性能甚至使程序崩溃。而现在流行的判断访问WEB程序是合法用户还是恶意操作的方式,就是采用 一种叫 "字符校验"的技术.WEB网站像现在的动网论坛,他采用达到方法是为客户提供一个包含随即字符串的图片,用户必须读取这些字符串,然后随 登陆窗体或者发帖窗体等用户创建的窗体一起提交.因为人的话,可以很容易读出图片中的数字,但如果是一段客户端攻击代码,通过一般手段是很难识别验证码的这样可以确保当前访问是来自一个人而非机器。

验证码:就是将一串随机产生的数字或符号,生成一幅图片, 图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。

作用:

验证码一般是防止有人利用机器人自动批量注册、对特定的注册用户用特定程序暴力破解方式进行不断的登陆、灌水。因为验证码是一个混合了数字或符号的图片,人眼看起来都费劲,机器识别起来就更困难。像百度贴吧未登录发贴要输入验证码大概是防止大规模匿名回帖的发生。

 一般注册用户ID的地方以及各大论坛都要要输入验证码

 常见的验证码:

1>四位数字,随机的一数字字符串,最原始的验证码,验证作用几乎为零。

2>CSDN网站用户登录用的是GIF格式,目前常用的随机数字图片验证码。图片上的字符比较中规中矩,验证作用比上一个好。没有基本图形图像学知识的人,不可破!可惜读取它的程序,在CSDN使用它的第一天,好像就在论坛里发布了,真是可怜!

3>QQ网站用户登录用的是PNG格式,图片用的随机数字+随机大写英文字母,整个构图有点张扬,每刷新一次,每个字符还会变位置呢!有时候出来的图片,人眼都识别不了,厉害啊…

4>MS的hotmail申请时候的是BMP格式, 随机数字+随机大写英文字母+随机干扰像素+随机位置。

5>Google的Gmail注册时候的是JPG格式,随机英文字母+随机颜色+随机位置+随机长度。

6>其他各大论坛的是XBM格式,内容随机。

验证码的作用:有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上是用验证码是现在很多网站通行的方式(比 如招商银行的网上个人银行,腾讯的QQ社区),我们利用比较简易的方式实现了这个功能。虽然登陆麻烦一点,但是对社区还来说这个功能还是很有必要,也很重 要。但我们还是提醒大家主要保护自己的密码,尽量使用混杂了数字、字母、符号在内的6位以上密码,不要使用诸如1234之类的简单密码或者与用户名相同、 类似的密码。 不要因为只是来iclub问问问题,就随意设置密码,保护你自己的密码也是保护你自己,免得你的账号给人盗用给自己带来不必要的麻烦。 ~

(1).验证码一般是防止批量注册的,人眼看起来都费劲,何况是机器。二像百度贴吧未登录发贴要输入验证码大概是防止大规模匿名回帖的发生目 前,不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片, 图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。

(2).一般注册用户ID的地方以及各大论坛都要要输入验证码

(3).常见的验证码

1,四位数字,随机的一数字字符串,最原始的验证码,验证作用几乎为零。2,CSDN网站用户登录用的是GIF格式,目前常用的随机数字图片验证 码。图片上的字符比较中规中矩,验证作用比上一个好。没有基本图形图像学知识的人,不可破!可惜读取它的程序,在CSDN使用它的第一天,好像就在论坛里 发布了,真是可怜!

3,QQ网站用户登录用的是PNG格式,图片用的随机数字+随机大写英文字母,整个构图有点张扬,每刷新一次,每个字符还会变位置呢!有时候 出来的图片,人眼都识别不了,厉害啊…4,MS的hotmail申请时候的是BMP格式, 随机数字+随机大写英文字母+随机干扰像素+随机位置。

5,Google的Gmail注册时候的是JPG格式,随机英文字母+随机颜色+随机位置+随机长度。6,其他各大论坛的是XBM格式,内容随机。

(4)意义:不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅 图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。

验证码的作用:有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上是用验证码是现在很多网站通行的方式 (比如招商银行的网上个人银行,腾讯的QQ社区),我们利用比较简易的方式实现了这个功能。虽然登陆麻烦一点,但是对社区还来说这个功能还是很有必要,也 很重要。但我们还是提醒大家主要保护自己的密码,尽量使用混杂了数字、字母、符号在内的6位以上密码,不要使用诸如1234之类的简单密码或者与用户名相 同、类似的密码。 不要因为只是来iclub问问问题,就随意设置密码,保护你自己的密码也是保护你自己,免得你的账号给人盗用给自己带来不必要的麻烦。

 1 package com.pengfei.verifycode;
 2 
 3 import java.awt.Color;
 4 import java.awt.Font;
 5 import java.awt.Graphics2D;
 6 import java.awt.image.BufferedImage;
 7 import java.io.FileNotFoundException;
 8 import java.io.FileOutputStream;
 9 import java.io.IOException;
10 import java.util.Random;
11 
12 import javax.imageio.ImageIO;
13 
14 public class ImageRand {
15 
16     private final int LENGTH = 60; // 验证码的长度
17     private final int HEIGHT = 20; // 验证码的高度
18     private final int COUNT = 4; // 验证码的字符个数
19     char codeCharacters[] = { //
20     ‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘, ‘G‘, ‘H‘, ‘I‘, ‘J‘,
21 
22     ‘K‘, ‘L‘, ‘M‘, ‘N‘, ‘O‘, ‘P‘, ‘Q‘, ‘R‘, ‘S‘, ‘T‘, ‘U‘, ‘V‘, ‘W‘,
23 
24     ‘X‘, ‘Y‘, ‘Z‘, ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘,
25 
26     ‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘, ‘g‘, ‘h‘, ‘i‘, ‘j‘,
27 
28     ‘k‘, ‘l‘, ‘m‘, ‘n‘, ‘o‘, ‘p‘, ‘q‘, ‘r‘, ‘s‘, ‘t‘, ‘u‘, ‘v‘, ‘w‘, };
29     
30     int x=LENGTH/(COUNT+1);
31     int y=HEIGHT-4;
32     
33     public void imageRand() throws FileNotFoundException, IOException{
34         // 得到图片缓冲区
35         BufferedImage bi = new BufferedImage(LENGTH, HEIGHT,
36                 BufferedImage.TYPE_INT_RGB);
37         // 得到绘制环境
38         Graphics2D g2 = bi.createGraphics();
39         //填充背景
40         g2.setColor(Color.WHITE);
41         g2.fillRect(0, 0, LENGTH, HEIGHT);
42         // 画边框
43         g2.setColor(Color.cyan);
44         g2.drawRect(0, 0, 250 - 1, 100 - 1);
45         g2.setFont(new Font("宋体", Font.BOLD, 18)); // 设置字体
46 
47         Random random = new Random();
48         // 产生160条随机线,使图像中的字符不容易被程序锁识别
49         for (int i = 0; i < 160; i++) {
50             int x = random.nextInt(LENGTH);
51             int y = random.nextInt(HEIGHT);
52             int x1 = random.nextInt(12);
53             int y1 = random.nextInt(12);
54             g2.drawLine(x, y, x+x1, y+y1);
55         }
56 
57         StringBuffer sb = new StringBuffer();
58         int red = 0, green = 0, blue = 0;
59 
60         for (int i = 0; i < COUNT; ++i) {
61             String str = String.valueOf(codeCharacters[random
62                     .nextInt(codeCharacters.length)]);
63             red = random.nextInt(255);
64             green = random.nextInt(255);
65             blue = random.nextInt(255);
66 
67             g2.setColor(new Color(red, green, blue));
68             g2.drawString(str, (i+1)*x , y );
69             
70             sb.append(str);    //将产生的四个随机数组合在一起
71         }
72 
73         ImageIO.write(bi, "JPEG", new FileOutputStream("f:/a.jpeg"));
74     }
75 
76 }

 

JAVA代码生成验证码

标签:

原文地址:http://www.cnblogs.com/ouwenkgwpf/p/4488588.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!