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