由于其强大的文本、图形操作能力和强大的相互调用通过使用脚本DOM,似乎是一个完美的正验证码引擎。 【源码下载】
验证码是一种通过回复测试用来确定一个信任度,确定最终用户是真正的人,而不是“机器人”。例如你在论坛上、注册表单,提交留言和其他地方看到的的验证码,都可能受到脚本机器的攻击。通常,一个验证码涉及到播放声音或显示一个扭曲的图象,人类能够识别,但模式匹配和/或光学字符识别(OCR)技术却很难准确的破译。由于测试是由计算机发出来测试一个人,它常常被称为反向测试(反向测试是由人类设计的,用来测试计算机)。
验证码最关键的是,这也使得很难,如果不是不可能,脚本软件确定挑战的答案。 Asirra验证器是一个随机显示猫和狗图像的例子。用户被要求通过点击确定哪支是猫。这对人来说是很容易,但这个测试是非常困难的计算机算法。
某天我正在编码,它告诉我silverlight能很完美的实现验证器。它非常容易和简单的文本操作和模糊图形图像,更远的是,它的输出不是一个一个机器人可以解析的简单位图。相反,它是一个交互式脚本插件用来识别图像,它必须有它自己的Silverlight引擎,能够扫描和识别Silverlight的渲染。
我开始编写一个实际例子。我刻意保持它的基本 ,以便让你读的时候有兴趣和机会扩展和增加功能。
第一步是创建一个要使用的简单的验证类。
- //======================================================================
- //
- // Copyright (C) 2010-2011 Rockay.Lau
- // All rights reserved
- //
- // CLR版本: 4.0.30319.1
- // 新建项输入的名称: CaptchaViewModel
- // 机器名称: ROCKAY
- // 命名空间名称: SilverlightCaptcha,MVVM
- // 文件名: CaptchaViewModel
- // 当前系统时间: 5/3/2010 7:53:48 PM
- //
- // 当前登录用户名: Administrator
- // 创建年份: 2010
- //
- // created by Theo at 5/3/2010 7:53:48 PM
- // http://Rockay.cnblogs.com
- //
- //======================================================================
- using System;
- using System.Windows.Browser;
- namespace SilverlightCaptcha.MVVM
- {
- /// <summary>
- /// captcha视图模型
- /// </summary>
- [ScriptableType]
- public class CaptchaViewModel
- {
- /// <summary>
- /// 客户端引用key
- /// </summary>
- private const string CAPTCHA_KEY = "SilverCaptcha";
- /// <summary>
- /// 数组
- /// </summary>
- private static readonly char[] _charArray = "ABCDEFGHJKLMNPRSTUVWXYZ23456789刘其超小笨蛋".ToCharArray();
- /// <summary>
- /// captcha文本
- /// </summary>
- public string CaptchaText { get; set; }
- /// <summary>
- /// 构造验证码
- /// </summary>
- public CaptchaViewModel()
- {
- char[] captcha = new char[8];
- Random random = new Random();
- for (int x = 0; x < captcha.Length; x++)
- {
- captcha[x] = _charArray[random.Next(_charArray.Length)];
- }
- CaptchaText = new string(captcha);
- HtmlPage.RegisterScriptableObject(CAPTCHA_KEY, this);
- }
- /// <summary>
- /// Returns true if ,based on the response,the user appears to the human
- /// </summary>
- /// <param name="challengeResponse">the response to the captcha challenge</param>
- /// <returns>匹配成功返回true,反之为匹配失败</returns>
- public bool IsHuman(string challengeResponse)
- {
- return challengeResponse.Trim().ToUpper().Equals(CaptchaText);
- }
- }
- }
下面就是最终的效果:
错误时

正确时
