返回列表 发帖

[转帖]用VB制作验证码生成器

■湖南  谢潇渔
故事的发生
最近发现自己制作的共享软件客户中使用盗版者居多。一开始还以为注册机加密算法被识破了,调查后才知道原来是用黑客软件进行暴力破解的。我一次次加强软件加密算法,但效果并不理想。有一次,当我在注册雅虎邮箱时,发现它是通过输入验证码来验证用户的合法性以防止非法注册,难道我就不能使用这个方法来解决暴力破解的问题吗?
当然,直接把验证码保存成图片固然可以防止一些黑客暴力破解,但由于现在破解技术的日益高明,简单图片很容易被识别,所以我们需要对图片进行一下“加密处理”。我的想法是用图片框输出验证码,再利用VB自带的画图函数将验证码描绘得奇怪一些,再随机添加乱七八糟的背景,从而只有人才能够识别,而暴力破解软件自然无能为力了。需要注意的是,我们的算法应该能使用户很容易分开验证码和背景色。
在编写这个程序之前我们需要掌握以下知识:1.图形文件的输出;2.VB中的画点、画线函数;3.调整图片框字体和背景色的方法。如果有什么问题的话可以参考程序谷以前刊登的张鸿的《感悟Visual Basic》系列文章。
算法设计
1.窗体设计
启动VB6并新建一个标准EXE工程,布置好控件并设置好名称。
接着将两个图片框的AutoRedraw属性设置成True,txt_inp、cmd_browse的Enabled属性设置为False,txt_inp的Maxlength属性设置成10。然后单击“工程→部件”,勾选“Microsoft CommonDialog Control 6.0”。
2.算法
加密过程是程序的重点。在这里我们运用画线和画点函数来处理图片,在图片框上随机选两个点画直线,同时用随机函数确定它的颜色;再随机点一个点,同样用随机函数确定它的颜色。在这里我们还用随机取字体样式和背景色,不过要注意的是,背景和字体颜色的差别要搞大一些,由于每个RBG分量值越大颜色越深,因此我们用下面两条语句就可以增强颜色的对比度:
pic_las.ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
pic_las.BackColor = RGB(Rnd * 55, Rnd * 55, Rnd * 55)
绘制图像的具体的代码如下:
Sub AddPas()
  On Error GoTo Err1
  pic_las.Print Space(10 - Len(Result)); Result
  Dim x, y, x1, x2, i As Integer
  ';随机决定输出字体样式
  pic_las.FontItalic = Int(Rnd * 2)
  pic_las.FontUnderline = Int(Rnd * 2)
  pic_las.ForeColor = RGB(Rnd * 155 + 100, Rnd * 155 + 100, Rnd * 155 + 100)
  ';为验证码添加随机直线
  For i = 1 To (Int(Rnd(1) * 8) + 1)
    x = Int(Rnd * pic_las.Width): y = Int(Rnd * pic_las.Height)
    x1 = Int(Rnd * pic_las.Width): Y1 = Int(Rnd * pic_las.Height)
    pic_las.Line (x, y)-(x1, Y1), RGB(Rnd * 255, Rnd * 255, Rnd * 255)
  Next i
  ';为验证码随机添加圆点
  For i = 1 To (Int(Rnd(1) * 200) + 100)
    pic_las.PSet (pic_las.Width * Rnd, pic_las.Height * Rnd), _
      RGB(Rnd * 255, Rnd * 255, Rnd * 255)
  Next i
  ';写入输出文件
  If chk_file.Value = 1 Then
    SavePicture pic_las.Image, txt_outfile.Text
    MsgBox "验证码已经保存在:" & txt_outfile.Text, vbInformation
  End If
  Exit Sub
Err1:  ';产生了错误
  MsgBox Err.Number & ":" & Err.Description, vbExclamation
End Sub
内容处理好了,接下来就只要简单响应用户的操作即可。在这里我们还需要解决随机生成验证码的问题,我们可以把需要生成的验证码每一位都放入一个字符串,再用随机函数以及字符串截取函数Mid(String,Start As Long,[Length])读入每一位验证码。另外为了增强程序的功能,我还允许用户保存和拷贝验证码以及允许用户自行定义验证码。由于版面有限,这里就不给出完整的源程序了,你可以从http://www.cfan.com.cn/11program/200513/vbpass.zip下载到完整的源代码。
总结
运行一下程序,“加密”效果还不错吧。
这可不是一般的破解机器能识别得了的哦!当然你也可以将这个加密算法运用到你个人的程序和论坛上去,它为程序的安全性提供了很好的保证呢!由于本人才疏学浅,可能有很多需要改正的地方,如果大家对此程序有什么想法或者意见通通告诉我好了,我在Cfan论坛上的名字是Lieo,我的邮箱是:lieo_hunan@yahoo.com.cn。
[DISABLELBCODE]

[转帖]用VB制作验证码生成器

这也行?实验一下。。

TOP

返回列表 回复 发帖