2804937988的验证码的作用及原理码

人民日报:点击验证码背后的真民意
&&&&来源:&&&&
  年关将至,火车票再次成为关注焦点。而今年“意外走红”的,却是铁路售票网站的验证码。据悉,为防止被破解,12306网站对图像验证码进行了大规模升级,一次性填对的概率极低,让旅客大伤脑筋。
  网络流传的各种验证码截图中,有找出发电机、排风机,还有“点击下图中所有的加湿器”。难怪有网友说,这样的“全民智力测试”,“拒绝了99%的旅客”。客观地讲,这确实为网购火车票带来不便。而以春运抢票的激烈程度,很多时候通过验证码这一关后,“黄花菜都已经凉了”,这甚至比无票更让人情绪激动。网络流传的截图或许有真有假,但乘客的不满却是实实在在的。
  然而,我们也应当看到,铁路部门之所以如此“费力不讨好”,出发点其实是要维护一个绿色、安全、公平的购票环境,可谓“用心良苦”。过去几年,即便引入了实名购票、网络购票等方式,黄牛横行、抢票软件“插队”的乱象,还是一再上演。采用颇有难度的验证码,正是为了让旅客更好地吃上网络购票这一“自助餐”。
  当然,验证码过于复杂,封住了网站漏洞、掐断了插队之路,却也同时给守规矩的人添了堵。如何做到两全其美,无疑是12306在接下来的工作中,需要正视并予以解决的问题。不断听取和汲取公众意见,不断完善购票服务,也正是12306的职责所在。
  事实上,各种社会公共政策的实施,都会有一个过程。地铁安检,曾经遭到诸多反对,繁琐手段换来安全感,公众才慢慢接受;尾号限行,刚开始时诟病颇多,但交通拥堵、雾霾严重之时,才承认它的必要。争议的背后,是公众和公共部门对公民切身利益的共同关切,也是对个人利益和公共利益的不同侧重。然而,也正是得益于双方不同角度的审视,促成了各种高效便民措施的出台。
  其实,无论是购票的验证码,还是地铁安检、尾号限行、网络专车,公共政策中安全与效率、眼前与长远、个人与群体的“平衡”问题,对公众和政府部门双方都是考验。在必不可少的互动过程中,公众不妨多加体谅,相关部门则需更加亲民、利民、便民。双方共同用心改进,公共治理才能得到民意支持、实施更加顺畅。
  《 人民日报 》( 日 05 版)
(责编:王政淇、文松辉)
善意回帖,理性发言!
恭喜你,发表成功!
请牢记你的用户名:,密码:,立即进入修改密码。
s后自动返回
5s后自动返回
恭喜你,发表成功!
5s后自动返回
最新评论热门评论
观点集粹|精彩博客
24小时排行&|&
人 民 网 版 权 所 有 ,未 经 书 面 授 权 禁 止 使 用
Copyright &
by .cn all rights reserved
人 民 网 版 权 所 有 ,未 经 书 面 授 权 禁 止 使 用
Copyright &
by .cn. all rights reserved&&|&&责编:魏景芳
&&&&昨天,铁路12306订票网站悄然升级,登录验证码不再使用传统的输入图片显示字符的方式,而是根据提示点击图片。验证码方式的更改,将给所有抢票工具带来不小的难题。12306新验证码&&&&看了12306新的验证码,真是醉了...不过,这验证码功力还属一般,让你见识一下真正的奇葩们。1、数学天才型有直接戳瞎双眼的冲动(图片来自九个头条)咳咳...决定直接关闭(图片来自IThome)默默的点了换一题(图片来自IThome)不愧是学府啊~~(图片来自九个头条)2、数理天才型我只想说...这是神马网站要这么费劲(图片来自搜狐社区)3、眼力型为什么感觉满眼都是诺基亚...(图片来自IThome)找不同玩儿high了吧(图片来自baidu)4、文学常识型怎么,不念点书不让登陆啊~(图片来自baidu)5、理科常识型默默的关闭(图片来自baidu)&&&&根据最新消息,抢票软件已经攻破了12306的验证码难题,坐等12306把验证码的难度提升到什么级别。
天津重庆哈尔滨沈阳长春石家庄呼和浩特西安太原兰州乌鲁木齐成都昆明贵阳长沙武汉郑州济南青岛烟台合肥南京杭州东莞南宁南昌福州厦门深圳温州佛山宁波泉州惠州银川
本城市下暂无经销商
下载中关村在线Android 客户端
下载中关村在线 iPhone 客户端
下载中关村在线Windows8客户端
成为中关村在线微信好友14176人阅读
一开始接触验证码,觉得很麻烦,每次登陆还得输入验证码,甚是麻烦,不是说过一切为了人民服务吗?为什么不给用户带来方便,我想没有哪位用户是愿意输入验证码的,特别是对于视力不是太好的朋友们,有时候很变态,明明记得是输入对了,但是最后显示的是验证码输入错误,这是否跟咱们的软件为人民服务冲突呢?最为难的是春运的时候买火车票,很多人都是买到票之后,由于验证码输入错误或者提交失败一直到提交成功的时候,显示的却是票不足,购票不成功,这多伤人啊。为此,我百思不得其解。直到那一天……
我恍然发现,咱们想的都是太自私了,都是为自己的方便着想,没有想到程序员的难处,当然程序员是想让大家方便,但是没有事事都是两全其美的,所以为了大家方便的同时,程序员遇到更大的一个难题就是安全,而验证码是一种区分用户是计算机和人的全自动程序,可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上是用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,百度社区),程序员利用比较简易的方式实现了这个功能。到现在也许有很多的用户反映到登陆输入验证码太麻烦了,所以看到有一些网站是第一次登陆不需要输入验证码,然后你输入用户名或者密码不对的时候,就是登陆不成功的时候,验证码才出来,毕竟那是电脑,没有人脑那么灵活,所以程序员就让给电脑一个灵感,但登陆不成功的时候,为了安全,就给出验证码,这就很好的有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试了,这就实现了安全。我们看一下网易163邮箱是怎么做的:
当你多次登陆不成功的时候,他会弹出这么一个窗口:
我们的验证码出来了,这就证明了咱们的验证码确实能有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试进行破解。所以当我们要输入验证码的时候,我们要想到这些,就不必心烦了,程序员想的不是不周到,是想让大家的数据更加安全,也为我们的秘密泄露加上了很好的保护套。
至于春运买火车票的,我看见很多人抱怨说输入验证码导致自己没买到票,这么说吧,要是不输入验证码,那更买不到了,至于人家的铁道部网站做的怎么样,咱们先不讨论。
相信很多人跟我一样,有过这样的背景,其实挺好,没有这样的疑惑,我们就没有进步的动力,就难以跟上时代的步伐。我写这篇博客就是想给大家解开这个迷惑,到底这是怎么做到的呢?
我在想,为什么验证码那么神奇呢?为什么验证码能区分用户是计算机和人呢?他是怎么做到的呢?原因很简单,我们来看看内部的代码运行情况:
我们做一个登陆页面,来看看验证码的背后是怎么工作的:
&%@ Page Language=&C#& AutoEventWireup=&true& CodeBehind=&Login_blog.aspx.cs& Inherits=&WebApplication1.Login_blog& %&
&!DOCTYPE html PUBLIC &-//W3C//DTD XHTML 1.0 Transitional//EN& &http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&&
&html xmlns=&http://www.w3.org/1999/xhtml&&
&head runat=&server&&
&title&登陆验证码测试&/title&
&link href=&css/Login_blog.css& rel=&stylesheet& type=&text/css& /&
&script language=&javascript& type=&text/javascript&&
& & & & function changeCode() {
& & & & & & var imgNode = document.getElementById(&vimg&);
& & & & & & imgNode.src = &../handler/WaterMark.ashx?t=& + (new Date()).valueOf(); &// 这里加个时间的参数是为了防止浏览器缓存的问题 &&
& & & & } &
& & &/script&
&form id=&form1& runat=&server&&
登录验证码测试
&div id=&Login_blog&&
&asp:TextBox ID=&txtUserName& runat=&server& CssClass=&textbox&&&/asp:TextBox&
&asp:RequiredFieldValidator ID=&RequiredFieldValidator1& runat=&server& ErrorMessage=&请输入用户名&
Text=&*& ControlToValidate=&txtUserName&&&/asp:RequiredFieldValidator&
&asp:TextBox ID=&txtPassword& runat=&server& TextMode=&Password& CssClass=&textbox&&&/asp:TextBox&
&asp:RequiredFieldValidator ID=&RequiredFieldValidator2& runat=&server& ErrorMessage=&请输入密码!&
Text=&*& ControlToValidate=&txtPassword&&&/asp:RequiredFieldValidator&
验证码:&img src=&../handler/WaterMark.ashx& id=&vimg& alt=&& onclick=&changeCode()& /&
&asp:TextBox ID=&txtCode& runat=&server& CssClass=&txtCode&&&/asp:TextBox&
&asp:RequiredFieldValidator ID=&RequiredFieldValidator3& runat=&server& ErrorMessage=&请输入验证码!&
Text=&*& ControlToValidate=&txtCode&&&/asp:RequiredFieldValidator&
&asp:Button ID=&btnLogin& runat=&server& Text=&登录& OnClick=&btnLogin_Click& /&
&asp:ValidationSummary ID=&ValidationSummary1& runat=&server& ShowMessageBox=&true&
ShowSummary=&false& /&
在Login_blog.aspx.cs里边这样using S
using System.Collections.G
using System.L
using System.W
using System.Web.UI;
using System.Web.UI.WebC
using BLL;
using System.Web.S
namespace WebApplication1
public partial class Login_blog : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
//登录按钮
protected void btnLogin_Click(object sender, EventArgs e)
//判断验证码是否输入正确
string code = txtCode.Text.Trim();
string rightCode = Session[&Code&].ToString();
if (code!=rightCode)
Page.ClientScript.RegisterStartupScript(Page.GetType(), &message&, &&script language='javascript' defer&alert('验证码输入错误!');&/script&&);
string name = txtUserName.Text.Trim();
string pwd = txtPassword.Text.Trim();
bool b = LoginManager.Login(name, pwd);
//登录成功
Session[&admin&] =
Response.Redirect(&http://blog.csdn.net/yi_zz&);
//登录失败
Page.ClientScript.RegisterStartupScript(Page.GetType(), &message&, &&script language='javascript' defer&alert('登陆失败,用户名或者密码错误!');&/script&&);
}css文件中我们排一下版:
*登陆验证码测试
margin :0;
padding :0;
font-size :14
#loginfrm #login p
padding-bottom :10
width :150
我们在逻辑层写一点判断:/*
* 创建人:宗毅
* 创建时间:日19:38:27
* 说明:登陆的业务逻辑类
* 版权所有:
using System.Collections.G
using System.L
using System.T
namespace BLL
class LoginManager
#region 用户登陆是否成功
/// &summary&
/// 用户登陆是否成功
/// &/summary&
/// &param name=&name&&用户名&/param&
/// &param name=&pwd&&密码&/param&
/// &returns&&/returns&
public static bool Login(string name, string pwd)
bool flag =
if (&zongyi& == name && &czy& == pwd)
#endregion
最后看看验证码这部分的代码:
using System.W
using System.D
using System.Drawing.Drawing2D;
using System.Web.SessionS
public class WaterMark : IHttpHandler, IRequiresSessionState
// 要使用session必须实现该接口,记得要导入System.Web.SessionState命名空间
public void ProcessRequest(HttpContext context)
string checkCode = GenCode(5);
// 产生5位随机字符
context.Session[&Code&] = checkC //将字符串保存到Session中,以便需要时进行验证
System.Drawing.Bitmap image = new System.Drawing.Bitmap(70, 22);
Graphics g = Graphics.FromImage(image);
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
// 画图片的背景噪音线
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());
g.Dispose();
image.Dispose();
/// &summary&
/// 产生随机字符串
/// &/summary&
/// &param name=&num&&随机出几个字符&/param&
/// &returns&随机出的字符串&/returns&
private string GenCode(int num)
string str = &ABCDEFGHIJKLMNOPQRSTUVWXYZ&;
char[] chastr = str.ToCharArray();
string code = &&;
Random rd = new Random();
for (i = 0; i & i++)
//code += source[rd.Next(0, source.Length)];
code += str.Substring(rd.Next(0, str.Length), 1);
public bool IsReusable
我们看到这个界面:
这个登录验证码的窗体已经算完成了,我们看的出来验证码其实就是通过一张图片,来区分用户和计算机,就能达到很好的防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试;所以为了咱们的网络安全,这个验证码确实发挥了很大的作用。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:598609次
积分:5720
积分:5720
排名:第2744名
原创:62篇
评论:1648条
阅读:20499
文章:11篇
阅读:79579
文章:11篇
阅读:83103
(9)(5)(6)(4)(4)(3)(4)(8)(4)(8)(7)(4)(1)当前位置: &
网友吐槽12306的验证码击败全国99%的购票者(图)(1)
扫描到手机
17:11:11 & & &
&&&&原标题:12306的验证码,已经击败了全国99%的购票者……&&&&导读:春运火车票开始预订了,然而,要想在网上买到票,总有些坎不是你抬抬脚就迈得过去的……&&&&前两天,听说12月3号之前要登录12306完成手机验证时,小编就慌了一次。&&&&还好,在同事小伙伴之前整理的《12月3日前不验证就不能买火车票?铁总这样回应》里找到了答案。小编这才放下心来,看着这张购票日程表,准备订票。2016年春运火车票预售期时间表&&&&然而万万没想到,这只是噩梦的开始……&&&&当小编用颤抖的双手输入了用户名和密码,却发现,还有验!证!码!呀!&&&&1 一开始还是比较简单的图据12306官网&&&&吐槽:排风机是什么?排风机是什么?排风机是什么?&&&&
用微信扫描二维码分享至好友和朋友圈
精彩高清图推荐:
(window.slotbydup=window.slotbydup || []).push({
id: '2492292',
container: s,
size: '190,265',
display: 'inlay-fix'}

我要回帖

更多关于 验证码的作用及原理 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信