后台生成验证码的两种方式

     现在所有的系统,只要有个登录页面,就要有验证码验证,验证码也是安全验证的一个环节,验证码可以防止恶意破解密码、刷票、du论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,利用比较简易的方式实现了这个功能。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答验证码的问题,所以回答出问题的用户就可以被认为是人类。所以大多数验证码都是要进行加密或者直接是以图片的方式展示的。

今天本篇博客介绍两种比较安全的生成验证码的方式,

(1)后台直接生成验证码图片返回给页面使用

(2)后台随机生成数字加密返回给前端,再由前端组装成想要的格式的图片。

第一种:后台直接生成验证码的方式:

controller层:

package com.boss.sso.util;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;

/**
 * Created by 2020/1/9 17:20.
 */
public class CreateValidateCode {

    private BufferedImage image;// 图像
    private String str;// 验证码
    private char[] code = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789".toCharArray();

    public static final String SESSION_CODE_NAME = "code";

    public CreateValidateCode() {
        init();// 初始化属性
    }

    /*
     * 取得RandomNumUtil实例
     */
    public static CreateValidateCode Instance() {
        return new CreateValidateCode();
    }

    /*
     * 取得验证码图片
     */
    public BufferedImage getImage() {
        return this.image;
    }

    /*
     * 取得图片的验证码
     */
    public String getString() {
        return str.toLowerCase();
    }

    private void init() {
        // 在内存中创建图象
        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));
        // 随机产生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(code[random.nextInt(code.length)]);
            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);
        }
        // 赋值验证码

        this.str = sRand;


        // 图象生效
        g.dispose();

        /* 赋值图像 */
        this.image = image;
    }

    /**
     * @param fc
     * @param bc
     * @return 给定范围获得随机颜色
     */
    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);
    }
}

生成验证码的工具类:

package com.boss.sso.controller;
import com.boss.sso.util.Crea
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
python 项目 基于python登录网站验证码生成与识别系统 近年来随着互联网应用技术的飞速发展,为了确保网站系统平台的安全性,各类网站相继推出了验证码应用技术,通过验证码的应用来帮助缓解暴力破解账户密码、垃圾邮件攻击以及在线虚假投票等安全问题,传统的验证码采用的模式主要通过复杂扭曲的字母数字识别来实现,然而这种验证码方式往往会引起用户端的反感导致网站平台的流量下降,为了提升用户端的体验感同时又要确保系统平台的安全性,行为式的验证码应运而生。行为式的验证码通常采用图片识别或者滑块游戏的方式来实现,这种验证方式不需要用户端的数据录入只需要鼠标的点击就可以实现,目前行为式的验证码更能够被用户所接受。 此次针对登录网站验证码生成和识别主要利用了Python技术来实现,开发设计了两种验证码模式:图形验证码以及滑动验证码,图形验证码主要通过动态的图形内容来验证,滑动验证码通过滑动交互的方式来实现拼图缺口的填入,在登录验证的过程中需要确保验证信息的准确性,一旦发生验证错误后台会自动刷新函数来确保验证码的随机性,同时如同一IP验证失败超过最大次数平台会自动锁定冻结账号信息,验证码可以帮助提升系统平台登录的安全性,防止暴力破解账户信息的情况发生。 关键词:Python语言;Django框架; 图形验证码;滑动验证码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值