【ntopng源码编译】【软件展示页源码】【节奏音乐游戏源码】c 识别验证码源码_c语言验证码识别

时间:2024-11-26 12:43:32 来源:java mina 源码分析 分类:百科

1.利用c#语言生成四位数字的识识别验证码的代码并详细注释
2.c# 数字和英文字母的 验证码
3.Python OpenCV 过点击式和滑动式图形验证码的校验

c 识别验证码源码_c语言验证码识别

利用c#语言生成四位数字的验证码的代码并详细注释

       public byte[] GetVerifyCode(string code)

       {

       int codeW = ;

       int codeH = ;

       int fontSize = ;

       string chkCode = string.Empty;

       //颜色列表,用于验证码、别验噪线、证码证码噪点

       Color[] color = { Color.Black,源码c语言验 Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue };

       //字体列表,用于验证码

       string[] font = { "Times New Roman" };

       //验证码的识识别字符集,去掉了一些容易混淆的别验ntopng源码编译字符

       char[] character = { '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'd', 'e', 'f', 'h', 'k', 'm', 'n', 'r', 'x', 'y', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'X', 'Y' };

       Random rnd = new Random();

       //生成验证码字符串

       for (int i = 0; i < 4; i++)

       {

       chkCode += character[rnd.Next(character.Length)];

       }

       //写入Session、验证码加密

       WebHelper.WriteSession(code,证码证码 Md5.md5(chkCode.ToLower(), ));

       //创建画布

       Bitmap bmp = new Bitmap(codeW, codeH);

       Graphics g = Graphics.FromImage(bmp);

       g.Clear(Color.White);

       //画噪线

       for (int i = 0; i < 3; i++)

       {

       int x1 = rnd.Next(codeW);

       int y1 = rnd.Next(codeH);

       int x2 = rnd.Next(codeW);

       int y2 = rnd.Next(codeH);

       Color clr = color[rnd.Next(color.Length)];

       g.DrawLine(new Pen(clr), x1, y1, x2, y2);

       }

       //画验证码字符串

       for (int i = 0; i < chkCode.Length; i++)

       {

       string fnt = font[rnd.Next(font.Length)];

       Font ft = new Font(fnt, fontSize);

       Color clr = color[rnd.Next(color.Length)];

       g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * , (float)0);

       }

       //将验证码写入内存流,并将其以 "image/Png" 格式输出

       MemoryStream ms = new MemoryStream();

       try

       {

       bmp.Save(ms,源码c语言验 ImageFormat.Png);

       return ms.ToArray();

       }

       catch (Exception)

       {

       return null;

       }

       finally

       {

       g.Dispose();

       bmp.Dispose();

       }

       }

c# 数字和英文字母的 验证码

       protected void Page_Load(object sender, EventArgs e)

        {

        VerifyCode v = new VerifyCode();

        v.Length = this.length;

        v.FontSize = this.fontSize;

        v.Chaos = this.chaos;

        v.BackgroundColor = this.backgroundColor;

        v.ChaosColor = this.chaosColor;

        v.CodeSerial = this.codeSerial;

        v.Colors = this.colors;

        v.Fonts = this.fonts;

        v.Padding = this.padding;

        string code = v.CreateVerifyCode(); // 取随机码

        v.CreateImageOnPage(code, this.Context); // 输出

        Response.Cookies.Add(new HttpCookie("vCode", code)); // 使用Cookies取验证码的值

        }

        //验证码长度(默认6个验证码的长度)

        int length = 4;

        public int Length

        {

        get { return length; }

        set { length = value; }

        }

        //验证码字体大小(为了显示扭曲效果,默认像素,识识别可以自行修改)

        int fontSize = ;

        public int FontSize

        {

        get { return fontSize; }

        set { fontSize = value; }

        }

        //边框补(默认1像素)

        int padding = 1;

        public int Padding

        {

        get { return padding; }

        set { padding = value; }

        }

        //是别验否输出燥点(默认为输出)

        bool chaos = true;

        public bool Chaos

        {

        get { return chaos; }

        set { chaos = value; }

        }

        //输出燥点的颜色(默认灰色)

        Color chaosColor = Color.LightGray;

        public Color ChaosColor

        {

        get { return chaosColor; }

        set { chaosColor = value; }

        }

        //自定义背景色(默认白色)

        Color backgroundColor = Color.White;

        public Color BackgroundColor

        {

        get { return backgroundColor; }

        set { backgroundColor = value; }

        }

        //自定义随机颜色数组

        Color[] colors = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };

        public Color[] Colors

        {

        get { return colors; }

        set { colors = value; }

        }

        //自定义字体数组

        string[] fonts = { "Arial", "Georgia" };

        public string[] Fonts

        {

        get { return fonts; }

        set { fonts = value; }

        }

        //自定义随机码字符串序列(使用逗号分隔)

        string codeSerial = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";//可以在此处修改你想要显示的字符

        public string CodeSerial

        {

        get { return codeSerial; }

        set { codeSerial = value; }

        }

        //生成校验码

        public Bitmap CreateImageCode(string code)

        {

        int fSize = FontSize;

        int fWidth = fSize + Padding;

        int imageWidth = (int)(code.Length * fWidth) + 4 + Padding * 2;

        int imageHeight = fSize * 2 + Padding;

        System.Drawing.Bitmap image = new System.Drawing.Bitmap(imageWidth, imageHeight);

        Graphics g = Graphics.FromImage(image);

        g.Clear(BackgroundColor);

        Random rand = new Random();

        //给背景添加随机生成的燥点

        if (this.Chaos)

        {

        Pen pen = new Pen(ChaosColor, 0);

        int c = Length * ;

        for (int i = 0; i < c; i++)

        {

        int x = rand.Next(image.Width);

        int y = rand.Next(image.Height);

        g.DrawRectangle(pen, x, y, 1, 1);

        }

        }

        int left = 0, top = 0, top1 = 1, top2 = 1;

        int n1 = (imageHeight - FontSize - Padding * 2);

        int n2 = n1 / 4;

        top1 = n2;

        top2 = n2 * 2;

        Font f;

        Brush b;

        int cindex, findex;

        //随机字体和颜色的验证码字符

        for (int i = 0; i < code.Length; i++)

        {

        cindex = rand.Next(Colors.Length - 1);

        findex = rand.Next(Fonts.Length - 1);

        f = new System.Drawing.Font(Fonts[findex], fSize, System.Drawing.FontStyle.Bold);

        b = new System.Drawing.SolidBrush(Colors[cindex]);

        if (i % 2 == 1)

        {

        top = top2;

        }

        else

        {

        top = top1;

        }

        left = i * fWidth;

        g.DrawString(code.Substring(i, 1), f, b, left, top);

        }

        //画一个边框 边框颜色为Color.White

        g.DrawRectangle(new Pen(Color.White, 0), 0, 0, image.Width - 1, image.Height - 1);

        g.Dispose();

        return image;

        }

        //将创建好的输出到页面

        public void CreateImageOnPage(string code, HttpContext context)

        {

        System.IO.MemoryStream ms = new System.IO.MemoryStream();

        Bitmap image = this.CreateImageCode(code);

        image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

        context.Response.ClearContent();

        context.Response.ContentType = "image/jpeg";

        context.Response.BinaryWrite(ms.GetBuffer());

        ms.Close();

        ms = null;

        image.Dispose();

        image = null;

        }

        //生成随机字符码

        public string CreateVerifyCode(int codeLen)

        {

        if (codeLen == 0)

        {

        codeLen = Length;

        }

        string[] arr = CodeSerial.Split(',');

        string code = "";

        int randValue = -1;

        Random rand = new Random(unchecked((int)DateTime.Now.Ticks));

        for (int i = 0; i < codeLen; i++)

        {

        randValue = rand.Next(0, arr.Length - 1);

        code += arr[randValue];

        }

        return code;

        }

        public string CreateVerifyCode()

        {

        return CreateVerifyCode(0);

        }

       网上好多,你可以搜搜!证码证码

Python OpenCV 过点击式和滑动式图形验证码的源码c语言验校验

       在近期进行App抓包的过程中,我发现该App在特定时间会弹出验证码。识识别完成验证后,别验系统会提供token,证码证码此token是发起正常请求所必需的。

       文章源码地址:github.com/ThinkerWen/C...

       以下是软件展示页源码验证码的截图:

       弹出验证码的Response如下:

       完成验证码的Request如下:

       通过观察,我发现只需将验证码的点击坐标发送至完成验证码的接口,即可获取到token。因此,现在的目标是提取坐标。

       观察发现,这个验证码相对简单,因为它没有图案扭曲,所以通过率较高。节奏音乐游戏源码同时,我也回忆起之前解决滑动验证码的方法(一并展示)。

       要通过验证码,首先需要将目标图案在背景上定位,找到其像素点。为此,我使用了Python的OpenCV库进行识别。

       1.提取:首先,理论模型指标源码我发现目标都是黑色图案,背景为透明。当我使用cv2.imread(front_image)加载时,显示一片漆黑。即使后来我使用了保留透明通道的加载方式,结果依旧。

       为了解决这个问题,我决定剥离透明通道,asp蔬果网站源码将目标图案透明色设置为白色,这样目标图案就自然显现了。

       2.找到目标图的位置:接着,我将目标的三个图案分割出来,分别找出它们的像素位置。由于图案排列位置固定,我直接记录坐标进行像素分割。

       分割后,我将目标图和背景图都转化为灰度,以防止颜色干扰。

       然后进行最佳匹配。然而,匹配结果并不理想,无法准确找到所有三个目标图案,因此需要进一步优化。

       3.优化匹配方案:继续观察后,我发现背景中的目标图案总是白色的,因此我决定保留背景上的白色部分,其余部分转为黑色。

       为了尽可能保留完整的图案,我经过多次尝试,发现-区间的RGB颜色可以保留大部分目标图案的白色。

       同时,我将黑色的目标图案反转为白色。

       由于需要获取的是点击坐标,我将左上角坐标(x1,y1)进行+的偏移,以移动到图案本身上面。

       经过验证,现在的识别方法可以正常通过点击验证码。

       滑动验证码的解决方案与点击验证码类似,甚至现在常见的一种滑动验证码已经有了通用的代码。

       看雪ID:暮至夜寒

       看雪-安全社区|安全招聘|kanxue.com

       本文为看雪论坛精华文章,由暮至夜寒原创,转载请注明来自看雪社区

       阅读原文: