图片验证码技术

建立通用功能类 Common.cs

在此类中添加生成随机字符串和字符串转换图片输出的函数

内容如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.IO;
namespace Cartoon
{

  public class Common
  {
    //获取一个随机字符串
    public static string GetRandom(int n)
    {
      string str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghizklmnopqrstuvwxyz1234567890";
      Random random = new Random();
      //生成n位随机数
      string result = string.Empty;
      for (int i = 1; i <= n; i++)
      {
        result += str[random.Next(0, str.Length - 1)].ToString();
      }
      return result;

    }
    //字符串转换图片
    public static void DisplayImage(string str)
    {
      //使用cookies或session传值,用于验证验证码
      //session
      HttpContext.Current.Session["code"] = str;
      //cookies
      System.Web.HttpContext.Current.Response.Cookies["code"].Value = str;
      //创建一个图片区域设置宽度和高度
      Bitmap image = new Bitmap(50, 20);
      //获取这个图片区域,便于在其中添加元素
      Graphics g = Graphics.FromImage(image);
      //设置图片背景为白色
      g.Clear(Color.White);
      //画线构造一些盲点,意思就是让图片显示不清楚
      Random random = new Random();
      for (int i = 0; i < 10; i++)
      {  
        int x1 = random.Next(image.Width);
        int y1 = random.Next(image.Height);
        int x2 = random.Next(image.Width);
        int y2 = random.Next(image.Height);
        g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
      }

      //定义字体对象,设置字体大小

      Font font = new Font("黑体", 12);
      //定义画笔颜色
      SolidBrush brush = new SolidBrush(Color.BlueViolet);
      //定义画笔写信息的位置坐标点,为左上角(0,0)点
      PointF point = new PointF(2, 2);
      //写字符串到图片中
      g.DrawString(str, font, brush, point);
      //给图片画边框
      g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
      //生成一个内存流对象,便于存储并输出图片
      MemoryStream ms = new MemoryStream();
      //保存绘制的图片到内存流ms中
      image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
      //输出二进制图片流
      HttpContext.Current.Response.BinaryWrite(ms.ToArray());

    }
  }

}

登陆页面的验证:

protected void jll_Click(object sender, EventArgs e)
{
  string code = Request.Form["check"];
  //使用cookies判断
  if (code == System.Web.HttpContext.Current.Request.Cookies["code"].Value)
  //使用session判断
  if (code == Session["code"].ToString())
  {
    Response.Write("<script>alert(‘right!‘)</script>");
  }
  else
  {
    Response.Write("<script>alert(‘false!‘)</script>");
  }
}

时间: 2024-11-06 18:37:51

图片验证码技术的相关文章

JavaWeb——图片验证码技术

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6134649.html 在常见的登录功能实现中,单靠账户.密码登录很容易遭受恶意攻击,有些人可以通过写一些脚本自动输入账户密码(当然,是瞎蒙的)频繁登录从而占用服务器的处理资源.这时候,此时,就可以通过验证码来达到拦截"非人类"发出请求. 验证码:全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答.可以防止恶意破解

字符型图片验证码识别完整过程及Python实现

1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻.本文介绍了一套字符验证码识别的完整流程,对于验证码安全和OCR识别技术都有一定的借鉴意义. 2   关键词 关键词:安全,字符图片,验证码识别,OCR,Python,SVM,PIL 3   免责声明 本文研究所用素材来自于某旧Web框架的网站 完全对外公开 的公共图片资源. 本文只做了该网站对外公开的公共图片资源进行了爬取, 并未越权 

Python 实现简单图片验证码登录

朋友说公司要在测试环境做接口测试,登录时需要传入正确的图片的验证码,本着懒省事的原则,推荐他把测试环境的图片验证码写死,我们公司也是这么做的^_^.劝说无果/(ㄒoㄒ)/~~,只能通过 OCR 技术来识别图片验证码了,看了一下他们的验证码,长这样,还好挺容易识别(背景色是透明的,有个坑需要处理). Python 实现了图片验证码登录 demo,用到的第三方模块有 requests, PIL, pytesseract. 1 # coding: utf-8 2 import requests 3 f

关于用户禁用Cookie的解决办法和Session的图片验证码应用

当用户通过客户端浏览页面初始化了Session之后(如:添加购物车,用户登陆等),服务器会将这些session数据保存在:Windows保存在C:\WINDOWS\Temp的目录下,Linux则是保存在/tmp 或 /var/lib/php/session目录下,之后给客户端返回一个Set-Cookie的参数(该参数表示在服务器端创建的Session_ID,可在http协议中看到),当该服务器的其他web端需要Session数据时则客户端会向服务器发送这个Session_ID,服务器就可以从Se

Java如何获取图片验证码保存

举例网站:https://my.1hai.cn/Login/?url=http://www.1hai.cn/ 一.场景:出于安全性考虑,越来越多的Web平台登录都会增加图形验证码(图片),或者短信验证码.由于是图片脚本selenium是无法识别的,这是时候我们解析图片验证码. 解决思路:1.通过selenium定位到图片,把图片保存到本地. 2 通过ORC技术将图片验证码转化为文字. 其他解决方法:A:去掉验证码    B:设置万能码 二.Web图片验证码的实现源码: 1 package uti

怎样用Java自制优秀的图片验证码?这样!

Completely Automated Public Turing test to tell Computers and Humans Apart 全自动区分计算机和人类的图灵测试 简称CAPTCHA,这就是验证码的含义.它可以防止恶意破解密码.刷票.论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试等. 虽然网上有一些很不错的验证码开源插件如kaptcha等,但是如果自己能够熟悉原理并且自己动手写,那岂不是一件很酷的事情么?今天给大家分享的这个教程是基于J

django图片验证码和滑动验证

1. django-simple-captcha 模块 安装 django-simple-captcha pip install django-simple-captcha pip install Pillow 注册 和注册 app 一样,captcha 也需要注册到 settings 中.同时它也会创建自己的数据表,因此还需要数据同步. # settings.py INSTALLED_APPS = [ ... 'captcha', ] # 执行命令进行数据迁徙,会发现数据库中多了一个 capt

水印、图片验证码

(貌似这个验证码不能获取,假设设置一个隐藏的label来记录又失去了他的意义) 一.水印 1.画布 System.Drawing.Image img = System.Drawing.Image.FromStream(FileUpload1.FileContent); 2.创建绘制对象,告诉它往哪张图片上绘制 Graphics g = Graphics.FromImage(img); 3.绘制的内容 string s = "www.itnba.com"; 4.绘制的字体 Font f

水印,图片验证码

加水印: 1.画布 2.笔.颜色.从那开始画.画的内容 获取新的路径 保存新的图片 设置新图片为背景 图片验证码: 例如画一个abcd 100*5o大小.黑体30像素.红色的 为了防止被抓去,跳转到另一个页面执行,需要把照片用流输出回去 完整验证码 验证: