1.利用c#语言生成四位数字的识识别验证码的代码并详细注释
2.c# 数字和英文字母的 验证码
3.Python OpenCV 过点击式和滑动式图形验证码的校验
利用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" };
//验证码的识识别字符集,去掉了一些容易混淆的别验源码病毒通过什么方式传播字符
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...
以下是swidc源码验证码的截图:
弹出验证码的Response如下:
完成验证码的Request如下:
通过观察,我发现只需将验证码的点击坐标发送至完成验证码的接口,即可获取到token。因此,现在的目标是提取坐标。
观察发现,这个验证码相对简单,因为它没有图案扭曲,所以通过率较高。源码zjia同时,我也回忆起之前解决滑动验证码的方法(一并展示)。
要通过验证码,首先需要将目标图案在背景上定位,找到其像素点。为此,我使用了Python的OpenCV库进行识别。
1.提取:首先,佛堂源码我发现目标都是黑色图案,背景为透明。当我使用cv2.imread(front_image)加载时,显示一片漆黑。即使后来我使用了保留透明通道的加载方式,结果依旧。
为了解决这个问题,我决定剥离透明通道,boardviewer源码将目标图案透明色设置为白色,这样目标图案就自然显现了。
2.找到目标图的位置:接着,我将目标的三个图案分割出来,分别找出它们的像素位置。由于图案排列位置固定,我直接记录坐标进行像素分割。
分割后,我将目标图和背景图都转化为灰度,以防止颜色干扰。
然后进行最佳匹配。然而,匹配结果并不理想,无法准确找到所有三个目标图案,因此需要进一步优化。
3.优化匹配方案:继续观察后,我发现背景中的目标图案总是白色的,因此我决定保留背景上的白色部分,其余部分转为黑色。
为了尽可能保留完整的图案,我经过多次尝试,发现-区间的RGB颜色可以保留大部分目标图案的白色。
同时,我将黑色的目标图案反转为白色。
由于需要获取的是点击坐标,我将左上角坐标(x1,y1)进行+的偏移,以移动到图案本身上面。
经过验证,现在的识别方法可以正常通过点击验证码。
滑动验证码的解决方案与点击验证码类似,甚至现在常见的一种滑动验证码已经有了通用的代码。
看雪ID:暮至夜寒
看雪-安全社区|安全招聘|kanxue.com
本文为看雪论坛精华文章,由暮至夜寒原创,转载请注明来自看雪社区
阅读原文: