- 此篇博文源于对验证码的机制好奇从而想一探究竟。
- 此处只介绍了最简单的字符型验证码实现,其他高级验证码机制更为复杂。
- 后续结合相关图像识别技术和自动化技术介绍验证码的攻与防。
验证码Java实现
1、Servlet
实现验证码
实现步骤:
- 1、服务端随机生成验证码:利用
java.awt
中的相关类,譬如Graphics
(核心),BufferedImage
- 2、利用
Servlet
进行Client
和Server
的交互,进行验证码的获取,以及表单的客户端验证码输入和服务端存储的记录进行验证。
核心代码:(验证码的生成)
public class ImageServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//初始化图片类型
BufferedImage bufferedImage = new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB);
//进行制图
Graphics graphics = bufferedImage.getGraphics();
//RGB设置颜色并填充对应图像坐标像素点
Color color = new Color(200, 150, 255);
graphics.setColor(color);
graphics.fillRect(0, 0, 68, 22);
char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
Random random = new Random();
int length = chars.length, index;
//循环随机生成验证码
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < 4; i++) {
index = random.nextInt(length);
//设置验证码的不同颜色并记录验证码
graphics.setColor(
new Color(random.nextInt(88), random.nextInt(188), random.nextInt(255)));
graphics.drawString(chars[index] + "", (i * 15) + 3, 18);
stringBuffer.append(chars[index]);
}
//将验证码的记录值存储在session中
req.getSession().setAttribute("picCode", stringBuffer.toString());
//将生成的图片写入Response的输出流中
ImageIO.write(bufferedImage, "JPG", resp.getOutputStream());
}
}
2、插件实现验证码:
- 常见验证码组件
Jcaptcha
和Kaptcha
敬请期待 😃
3、Java图片验证码
敬请期待 😃