在我们登陆某个网站或者网页或者客户端的时候通常会看到它的身影。不曾靠近,但却从未远离。
从不知道原来我们的距离也可以这样接近,由陌生到熟悉,由相识到相知,到如今的相依相偎,感谢这一路有你,感谢你(牛腩)让我们相遇。
这样的情景想必大家都会看见:
还有:
它如影随形,但我却只是指尖轻敲一闪即过从未留意它的面容,它的深情,五颜六色的、奇形怪状的背后是对于人生忠实的守候,随机出现,随时变化,一如人世间的世事不可知,不可预测,但是正是这个未知,带给人类的是奇幻的探索,但给我系统的是安全。
从未轻声细问过你,感觉你的存在是一种多余,因为你的要求那么低,只要认识字母和汉字便可以轻触你,从不逃避,给我们总是最满意的结果和会心的微笑,以至于我与你看似很近,但是心的距离是那么的遥远。
直到最近,才知道你的不易与忠实,在生命这条漫长的道路上,谁在忠实的将我们守候,除了爸妈,除了真挚的朋友,在那寥寥无几的人里,你是其中之一。守护着我,陪着我,让我们觉得有安全感的感觉真好。
牛腩让我认识了你,看清了你的容颜,变化莫测不是神秘的根源,而是安全守护的初衷。掀开你的面纱,往日相遇的情景一一浮现,相识在此刻走向相知。
l 跟着我在牛腩的牵引下掀开她的神秘面纱。
² 我们先建立一个一般处理程序命名为WaterMark.ashx。
之后将代码添加进去。代码详见地址:http://niunan.iteye.com/blog/252335
我这里的实现如下:
<strong><span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;">using System;
using System.Web;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Web.SessionState;
namespace 牛腩新闻发布系统.handler
{
public class WaterMark : IHttpHandler, IRequiresSessionState // 要使用session必须实现该接口,记得要导入System.Web.SessionState命名空间
{
public void ProcessRequest(HttpContext context)
{
string checkCode = GenCode(5); // 产生5位随机字符
context.Session["Code"] = checkCode; //将字符串保存到Session中,以便需要时进行验证
System.Drawing.Bitmap image = new System.Drawing.Bitmap(70, 22);
Graphics g = Graphics.FromImage(image);
try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
// 画图片的背景噪音线
int i;
for (i = 0; i < 25; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}
Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold));
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, true);
g.DrawString(checkCode, font, brush, 2, 2);
//画图片的前景噪音点
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
context.Response.ClearContent();
context.Response.ContentType = "image/Gif";
context.Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}
/// <summary>
/// 产生随机字符串
/// </summary>
/// <param name="num">随机出几个字符</param>
/// <returns>随机出的字符串</returns>
private string GenCode(int num)
{
string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//"的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严";
char[] chastr = str.ToCharArray();
// string[] source ={ "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", "#", "$", "%", "&", "@" };
string code = "";
Random rd = new Random();
int i;
for (i = 0; i < num; i++)
{
//code += source[rd.Next(0, source.Length)];
code += str.Substring(rd.Next(0, str.Length), 1);
}
return code;
}
public bool IsReusable
{
get
{
return false;
}
}
}
}</span></span></strong>
² 在登陆页面即在html文档中将文件引入,如下:
<strong><span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;"> <p>验证码:<img src="../handler/WaterMark.ashx" id="vimg" alt="" οnclick="changeCode()"/></span></span></strong>
² 添加点击验证码变化的方法changeCode()方法,动态改变需要javascript的知识。
<strong><span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;"> <script type ="text/javascript" >
function changeCode() {
var imgNode = document.getElementById("vimg");
imgNode.src = "../handler/WaterMark.ashx?t=" + (new Date()).valueOf(); // 这里加个时间的参数是为了防止浏览器缓存的问题
}
</script></span></span></strong>
这一连串的串联的起来的效果就是现在这个唯美唯妙的模样,我们来看看吧?
面纱的一层层揭开,是否有拨开云雾见青天的感觉呢?
l 那么验证码的作用有哪些呢?
验证码的作用:有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上是用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,腾讯的QQ社区),我们利用比较简易的方式实现了这个功能。虽然登陆麻烦一点,但是对社区还来说这个功能还是很有必要,也很重要。但我们还是提醒大家主要保护自己的密码,尽量使用混杂了数字、字母、符号在内的6位以上密码,不要使用诸如1234之类的简单密码或者与用户名相同、类似的密码。不要因为只是来iclub问问问题,就随意设置密码,保护你自己的密码也是保护你自己,免得你的账号给人盗用给自己带来不必要的麻烦。 ~
(1).验证码一般是防止批量注册的,人眼看起来都费劲,何况是机器。二像百度贴吧未登录发贴要输入验证码大概是防止大规模匿名回帖的发生目前,不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。
(2).一般注册用户ID的地方以及各大论坛都要要输入验证码
² 具体形式有哪些?
1、四位数字,随机的一数字字符串,最原始的验证码,验证作用几乎为零。
2、CSDN网站用户登录用的是GIF格式,目前常用的随机数字图片验证码。图片上的字符比较中规中矩,验证作用比上一个好。没有基本图形图像学知识的人,不可破!
3、QQ网站用户登录用的是PNG格式,图片用的随机数字+随机大写英文字母,整个构图有点张扬,每刷新一次,每个字符还会变位置呢!有时候出来的图片,人眼都识别不了。
4、MS的hotmail申请时候的是BMP格式, 随机数字+随机大写英文字母+随机干扰像素+随机位置。
5、Google的Gmail注册时候的是JPG格式,随机英文字母+随机颜色+随机位置+随机长度。其他各大论坛的是XBM格式,内容随机。
² 意义
不少网站为了防止用户利用机器自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。
l 小结
犹抱琵琶半遮面的她终于露出了真面目,随时变化容颜的背后不是代表她的喜怒无常,不是三心二意,而是对我们最最忠实的守护。正是她的神秘变换才使得那么想要伤害我们或者企图盗取我们私有的恶徒无可入之径,从而很好滴保护了我们。