网络编程
位置:首页>> 网络编程>> Asp编程>> ASP 验证码的程序及原理

ASP 验证码的程序及原理

作者:扬子 来源:CSDN 发布时间:2010-04-24 15:56:00 

标签:验证码,asp

一共4个页面:form.asp; chk.asp; num.asp; count.asp
得到一个随即数字。加密!

解密后成成XBM图片

利用session 判断

form.asp

<% 
'### To encrypt/decrypt include this code in your page  
'### strMyEncryptedString = EncryptString(strString) 
'### strMyDecryptedString = DeCryptString(strMyEncryptedString) 
'### You are free to use this code as long as credits remain in place 
'### also if you improve this code let me know. 
Private Function EncryptString(strString) 
'#################################################################### 
'### Crypt Function (C) 2001 by Slavic Kozyuk grindkore@yahoo.com ### 
'### Arguments: strString <--- String you wish to encrypt ### 
'### Output: Encrypted HEX string ### 
'#################################################################### 
    Dim CharHexSet, intStringLen, strTemp, strRAW, i, intKey, intOffSet 
    Randomize Timer 
    intKey = Round((RND * 1000000) + 1000000) '##### Key Bitsize 
    intOffSet = Round((RND * 1000000) + 1000000) '##### KeyOffSet Bitsize 
    If IsNull(strString) = False Then 
        strRAW = strString 
        intStringLen = Len(strRAW) 
        For i = 0 to intStringLen - 1 
            strTemp = Left(strRAW, 1) 
            strRAW = Right(strRAW, Len(strRAW) - 1) 
            CharHexSet = CharHexSet & Hex(Asc(strTemp) * intKey)& Hex(intKey) 
        Next 
        EncryptString = CharHexSet & "|" & Hex(intOffSet + intKey) & "|" & Hex(intOffSet) 
    Else 
        EncryptString = "" 
    End If 
End Function 
Private Function DeCryptString(strCryptString) 
'#################################################################### 
'### Crypt Function (C) 2001 by Slavic Kozyuk grindkore@yahoo.com ### 
'### Arguments: Encrypted HEX stringt ### 
'### Output: Decrypted ASCII string ### 
'#################################################################### 
'### Note this function uses HexConv() and get_hxno() functions ### 
'### so make sure they are not removed ### 
'#################################################################### 
    Dim strRAW, arHexCharSet, i, intKey, intOffSet, strRawKey, strHexCrypData 
    strRawKey = Right(strCryptString, Len(strCryptString) - InStr(strCryptString, "|")) 
    intOffSet = Right(strRawKey, Len(strRawKey) - InStr(strRawKey,"|")) 
    intKey = HexConv(Left(strRawKey, InStr(strRawKey, "|") - 1)) - HexConv(intOffSet) 
    strHexCrypData = Left(strCryptString, Len(strCryptString) - (Len(strRawKey) + 1)) 
    arHexCharSet = Split(strHexCrypData, Hex(intKey)) 
    For i=0 to UBound(arHexCharSet) 
        strRAW = strRAW & Chr(HexConv(arHexCharSet(i))/intKey) 
    Next 
    DeCryptString = strRAW 
End Function 
Private Function HexConv(hexVar) 
    Dim hxx, hxx_var, multiply  
    IF hexVar <> "" THEN 
        hexVar = UCASE(hexVar) 
        hexVar = StrReverse(hexVar) 
        DIM hx() 
        REDIM hx(LEN(hexVar)) 
        hxx = 0 
        hxx_var = 0 
        FOR hxx = 1 TO LEN(hexVar) 
            IF multiply = "" THEN multiply = 1 
            hx(hxx) = mid(hexVar,hxx,1) 
            hxx_var = (get_hxno(hx(hxx)) * multiply) + hxx_var 
            multiply = (multiply * 16) 
        NEXT 
        hexVar = hxx_var 
        HexConv = hexVar 
    END IF 
End Function 
Private Function get_hxno(ghx) 
    If ghx = "A" Then 
        ghx = 10 
    ElseIf ghx = "B" Then 
        ghx = 11 
    ElseIf ghx = "C" Then 
        ghx = 12 
    ElseIf ghx = "D" Then 
        ghx = 13 
    ElseIf ghx = "E" Then 
        ghx = 14 
    ElseIf ghx = "F" Then 
        ghx = 15 
    End If 
    get_hxno = ghx 
End Function 
%> 
<% 
randomize 
num = int(7999*rnd+2000) '计数器的值 
num2 = EncryptString(num) 
session("pwdt")=num 
%> 
<form action="chk.asp" method=post> 
请输入验证码: <input type="text" name="pwds"> 
<img src="count.asp?sksid=<%=num2%>"> <input type=submit value=提交> 
</form> 
chk.asp
<%
if trim(request.form("pwds"))<>trim(session("pwdt")) then
%>
输入错误: 应该为:<%=session("pwdt")%>,可你输入的是:<%=request.form("pwds")%>
<%
else
%>
输入正确
<%end if%>

count.asp

<!--#include file="num.asp"-->
<%
'### To encrypt/decrypt include this code in your page 
'### strMyEncryptedString = EncryptString(strString)
'### strMyDecryptedString = DeCryptString(strMyEncryptedString)
'### You are free to use this code as long as credits remain in place
'### also if you improve this code let me know.
Private Function EncryptString(strString)
'####################################################################
'### Crypt Function (C) 2001 by Slavic Kozyuk grindkore@yahoo.com ###
'### Arguments: strString <--- String you wish to encrypt ###
'### Output: Encrypted HEX string ###
'####################################################################
    Dim CharHexSet, intStringLen, strTemp, strRAW, i, intKey, intOffSet
    Randomize Timer
    intKey = Round((RND * 1000000) + 1000000) '##### Key Bitsize
    intOffSet = Round((RND * 1000000) + 1000000) '##### KeyOffSet Bitsize
    If IsNull(strString) = False Then
        strRAW = strString
        intStringLen = Len(strRAW)
        For i = 0 to intStringLen - 1
            strTemp = Left(strRAW, 1)
            strRAW = Right(strRAW, Len(strRAW) - 1)
            CharHexSet = CharHexSet & Hex(Asc(strTemp) * intKey)& Hex(intKey)
        Next
        EncryptString = CharHexSet & "|" & Hex(intOffSet + intKey) & "|" & Hex(intOffSet)
    Else
        EncryptString = ""
    End If
End Function
Private Function DeCryptString(strCryptString)
'####################################################################
'### Crypt Function (C) 2001 by Slavic Kozyuk grindkore@yahoo.com ###
'### Arguments: Encrypted HEX stringt ###
'### Output: Decrypted ASCII string ###
'####################################################################
'### Note this function uses HexConv() and get_hxno() functions ###
'### so make sure they are not removed ###
'####################################################################
    Dim strRAW, arHexCharSet, i, intKey, intOffSet, strRawKey, strHexCrypData
    strRawKey = Right(strCryptString, Len(strCryptString) - InStr(strCryptString, "|"))
    intOffSet = Right(strRawKey, Len(strRawKey) - InStr(strRawKey,"|"))
    intKey = HexConv(Left(strRawKey, InStr(strRawKey, "|") - 1)) - HexConv(intOffSet)
    strHexCrypData = Left(strCryptString, Len(strCryptString) - (Len(strRawKey) + 1))
    arHexCharSet = Split(strHexCrypData, Hex(intKey))
    For i=0 to UBound(arHexCharSet)
        strRAW = strRAW & Chr(HexConv(arHexCharSet(i))/intKey)
    Next
    DeCryptString = strRAW
End Function
Private Function HexConv(hexVar)
    Dim hxx, hxx_var, multiply 
    IF hexVar <> "" THEN
        hexVar = UCASE(hexVar)
        hexVar = StrReverse(hexVar)
        DIM hx()
        REDIM hx(LEN(hexVar))
        hxx = 0
        hxx_var = 0
        FOR hxx = 1 TO LEN(hexVar)
            IF multiply = "" THEN multiply = 1
            hx(hxx) = mid(hexVar,hxx,1)
            hxx_var = (get_hxno(hx(hxx)) * multiply) + hxx_var
            multiply = (multiply * 16)
        NEXT
        hexVar = hxx_var
        HexConv = hexVar
    END IF
End Function
Private Function get_hxno(ghx) 
If ghx = "A" Then 
ghx = 10 
ElseIf ghx = "B" Then 
ghx = 11 
ElseIf ghx = "C" Then 
ghx = 12 
ElseIf ghx = "D" Then 
ghx = 13 
ElseIf ghx = "E" Then 
ghx = 14 
ElseIf ghx = "F" Then 
ghx = 15 
End If 
get_hxno = ghx 
End Function 
%> 
<% 
Dim Image 
Dim Width, Height 
Dim num 
Dim digtal 
Dim Length 
Dim sort 
Length = 4 '自定计数器长度 
Redim sort( Length ) 
num=cint(DeCryptString(request.querystring("sksid"))) 
digital = "" 
For I = 1 To Length -Len( num ) '补0 
digital = digital & "0" 
Next 
For I = 1 To Len( num ) 
digital = digital & Mid( num, I, 1 ) 
Next 
For I = 1 To Len( digital ) 
sort(I) = Mid( digital, I, 1 ) 
Next 
Width = 8 * Len( digital ) '图像的宽度 
Height = 10 '图像的高度,在本例中为固定值 
Response.ContentType="image/x-xbitmap" 
hc=chr(13) & chr(10)  
Image = "#define counter_width " & Width & hc 
Image = Image & "#define counter_height " & Height & hc 
Image = Image & "static unsigned char counter_bits[]={" & hc 
For I = 1 To Height 
For J = 1 To Length 
Image = Image & a(sort(J),I) & "," 
Next 
Next 
Image = Left( Image, Len( Image ) - 1 ) '去掉最后一个逗号 
Image = Image & "};" & hc 
%> 
<% 
Response.Write Image 
%>

num.asp

以下是引用片段:

<% 
Dim a(10,10) 
a(0,1) = "0x3c" '数字0 
a(0,2) = "0x66" 
a(0,3) = "0xc3" 
a(0,4) = "0xc3" 
a(0,5) = "0xc3" 
a(0,6) = "0xc3" 
a(0,7) = "0xc3" 
a(0,8) = "0xc3" 
a(0,9) = "0x66" 
a(0,10)= "0x3c" 
a(1,1) = "0x18" '数字1 
a(1,2) = "0x1c" 
a(1,3) = "0x18" 
a(1,4) = "0x18" 
a(1,5) = "0x18" 
a(1,6) = "0x18" 
a(1,7) = "0x18" 
a(1,8) = "0x18" 
a(1,9) = "0x18" 
a(0,10)= "0x7e" 
a(2,1) = "0x3c" '数字2 
a(2,2) = "0x66" 
a(2,3) = "0x60" 
a(2,4) = "0x60" 
a(2,5) = "0x30" 
a(2,6) = "0x18" 
a(2,7) = "0x0c" 
a(2,8) = "0x06" 
a(2,9) = "0x06" 
a(2,10)= "0x7e" 
a(3,1) = "0x3c" '数字3 
a(3,2) = "0x66" 
a(3,3) = "0xc0" 
a(3,4) = "0x60" 
a(3,5) = "0x1c" 
a(3,6) = "0x60" 
a(3,7) = "0xc0" 
a(3,8) = "0xc0" 
a(3,9) = "0x66" 
a(3,10)= "0x38" 
a(4,1) = "0x38" '数字4 
a(4,2) = "0x3c" 
a(4,3) = "0x36" 
a(4,4) = "0x33" 
a(4,5) = "0x33" 
a(4,6) = "0x33" 
a(4,7) = "0xff" 
a(4,8) = "0x30" 
a(4,9) = "0x30" 
a(4,10)= "0xfe" 
a(5,1) = "0xfe" '数字5 
a(5,2) = "0xfe" 
a(5,3) = "0x06" 
a(5,4) = "0x06" 
a(5,5) = "0x3e" 
a(5,6) = "0x60" 
a(5,7) = "0xc0" 
a(5,8) = "0xc3" 
a(5,9) = "0x66" 
a(5,10)= "0x3c" 
a(6,1) = "0x60" '数字6 
a(6,2) = "0x30" 
a(6,3) = "0x18" 
a(6,4) = "0x0c" 
a(6,5) = "0x3e" 
a(6,6) = "0x63" 
a(6,7) = "0xc3" 
a(6,8) = "0xc3" 
a(6,9) = "0x66" 
a(6,10) ="0x3c" 
a(7,1) = "0xff" '数字7 
a(7,2) = "0xc0" 
a(7,3) = "0x60" 
a(7,4) = "0x30" 
a(7,5) = "0x18" 
a(7,6) = "0x18" 
a(7,7) = "0x18" 
a(7,8) = "0x18" 
a(7,9) = "0x18" 
a(7,10)= "0x18" 
a(8,1) = "0x3c" '数字8 
a(8,2) = "0x66" 
a(8,3) = "0xc3" 
a(8,4) = "0x66" 
a(8,5) = "0x3c" 
a(8,6) = "0x66" 
a(8,7) = "0xc3" 
a(8,8) = "0xc3" 
a(8,9) = "0x66" 
a(8,10)= "0x3c" 
a(9,1) = "0x3c" '数字9 
a(9,2) = "0x66" 
a(9,3) = "0xc3" 
a(9,4) = "0xc3" 
a(9,5) = "0x66" 
a(9,6) = "0x3c" 
a(9,7) = "0x18" 
a(9,8) = "0x0c" 
a(9,9) = "0x06" 
a(9,10)= "0x03" 
%>

0
投稿

猜你喜欢

  • BrowserPlus 到底是什么,又能做什么?BrowserPlus 是 Yahoo! 最近刚发布一个 Web 扩展的平台:终端用户需安装
  • 从前有三只小猪,长大自立了分别造房子住。老大搬来草堆堆出草屋,老二搬来木头搭出木屋,老三搬来砖头,砌墙,造烟囱,造出了坚固的砖房。一天晚上大
  • 如下:counter.htm<a href=counter.asp?save=123&url=http://127.0.0
  • 在工作中,作为一名开发者的你,也许偶尔需要从事维护数据库的工作。下面我们来介绍一下两个SQL服务器的维护技巧:轻松改变数据库拥有者、整理索引
  • MySQL字符集出错的解决方法:错误案例: Illegal mix of collations (gbk_chinese_ci,I
  • 图片非常重要,它们可以让你的页面更好看,更引人注目。但是,高质量和漂亮的图片常常会很大,它们会让页面加载变慢并消耗更多带宽。所以我们,这些设
  • 最常见的XML数据类型有:Element, Attribute,Comment, Text.     &nbs
  • 经常会遇到这样一个情况:浏览器弹出对话框,提示脚本运行时间过长,询问“停止”还是“继续”。那究竟各个浏览器是如何判断在什么时候才弹出此对话框
  • 1.获取function形参个数functionName.length2.较适用的运算符delete:删除以前定义的对象属性或方法的引用vo
  • 如何实现在下拉菜单里输入文字? 用这个代码试试看,应该可以的:<script>function pp(){se.opt
  •  今天在写BLOG的Trackback时,需要用到当前页的URL地址,并且包括?后的所有参数。在网上看到以下的这段ASP代码,它的
  • 当今越来越多的应用程序迁移到web平台上。由于没有平台的限制和安装的要求,SAAS的模式看起来非常有吸引力。Web应用程序的界面设计,其核心
  • 不论你做什么样的设计,色彩都是一个不容忽视的问题。色彩以一种“隐蔽”的方式传达的各种信息,这些信息会影响观看者的心理和感受,左右他们的判断和
  • 构筑专业的网络站点和应用程序,先进的设计工具,功能强大,开放式集成系统;流畅的开发进程。Macromedia Dreamweaver MX
  • 看了不少朋友的个人网站,有一个小问题,似乎很多朋友都忽略了,那就是版权声明的写法。虽然那只是一小行字,不过作为设计师也好,作为个人的爱好也好
  • 在IE下,获取Param的时候有个诡异现象(不知道算不算bug)。为了清晰起见,下面用最简单的HTML和JavaScript来说明。有这么一
  • 用户登录验证脚本,Chkpwd.asp<% '=======用户登录验证脚本======= '如果尚未定义Passed
  • python使用utf8编码,mysql也是utf8编码,是什么问题?后来查了一下,使用一个简单的办法即可:vsql = "ins
  • 用asp程序进行网页设计,大多因为需要访问数据库,然后再将数据显示到页面,如果数据很多的话,页面的访问速度也就变慢了,为了解决这个问题,可以
  • 有时候要用Javascript输常用的字符,比如每个页面都要有的脚注。这里提供一个转换脚本:将HTML自动转为JS代码<script&
手机版 网络编程 asp之家 www.aspxhome.com