仓酷云

标题: ASP教程之ASP考证码的程序及道理 [打印本页]

作者: 金色的骷髅    时间: 2015-1-16 22:13
标题: ASP教程之ASP考证码的程序及道理
减少客户内IT专业人才缺乏带来的影响。ASP的客户员工利用浏览器进入相关的应用软件,简单易用,无需专业技术支持。程序|考证码#####版权一切转载请保存感谢互助
#####部分程序取自收集
#####扬子
#####Email:yangzinet@hotmail.com
#####QQ:21112856
#####WebSite:www.tingfo.net


一共4个页面:form.asp;chk.asp;num.asp;count.asp
失掉一个随即数字。加密!
解密后成成XBM图片
使用session判别

form.asp


<%
###Toencrypt/decryptincludethiscodeinyourpage
###strMyEncryptedString=EncryptString(strString)
###strMyDecryptedString=DeCryptString(strMyEncryptedString)
###Youarefreetousethiscodeaslongascreditsremaininplace
###alsoifyouimprovethiscodeletmeknow.

PrivateFunctionEncryptString(strString)
####################################################################
###CryptFunction(C)2001bySlavicKozyukgrindkore@yahoo.com###
###Arguments:strString<---Stringyouwishtoencrypt###
###Output:EncryptedHEXstring###
####################################################################

DimCharHexSet,intStringLen,strTemp,strRAW,i,intKey,intOffSet
RandomizeTimer

intKey=Round((RND*1000000)+1000000)#####KeyBitsize
intOffSet=Round((RND*1000000)+1000000)#####KeyOffSetBitsize

IfIsNull(strString)=FalseThen
strRAW=strString
intStringLen=Len(strRAW)

Fori=0tointStringLen-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=""
EndIf
EndFunction




PrivateFunctionDeCryptString(strCryptString)
####################################################################
###CryptFunction(C)2001bySlavicKozyukgrindkore@yahoo.com###
###Arguments:EncryptedHEXstringt###
###Output:DecryptedASCIIstring###
####################################################################
###NotethisfunctionusesHexConv()andget_hxno()functions###
###somakesuretheyarenotremoved###
####################################################################

DimstrRAW,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))

Fori=0toUBound(arHexCharSet)
strRAW=strRAW&Chr(HexConv(arHexCharSet(i))/intKey)
Next

DeCryptString=strRAW
EndFunction



PrivateFunctionHexConv(hexVar)
Dimhxx,hxx_var,multiply
IFhexVar""THEN
hexVar=UCASE(hexVar)
hexVar=StrReverse(hexVar)
DIMhx()
REDIMhx(LEN(hexVar))
hxx=0
hxx_var=0
FORhxx=1TOLEN(hexVar)
IFmultiply=""THENmultiply=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
ENDIF
EndFunction

PrivateFunctionget_hxno(ghx)
Ifghx="A"Then
ghx=10
ElseIfghx="B"Then
ghx=11
ElseIfghx="C"Then
ghx=12
ElseIfghx="D"Then
ghx=13
ElseIfghx="E"Then
ghx=14
ElseIfghx="F"Then
ghx=15
EndIf
get_hxno=ghx
EndFunction


%>


<%
randomize
num=int(7999*rnd+2000)计数器的值
num2=EncryptString(num)
session("pwdt")=num
%>
<formaction="chk.asp"method=post>
请输出考证码:<inputtype="text"name="pwds">
<imgsrc="count.asp?sksid=<%=num2%>"><inputtype=submitvalue=提交>
</form>


chk.asp
<%
iftrim(request.form("pwds"))trim(session("pwdt"))then
%>
输出毛病:应当为:<%=session("pwdt")%>,可你输出的是:<%=request.form("pwds")%>
<%
else
%>
输出准确
<%endif%>

count.asp

<!--#includefile="num.asp"-->

<%
###Toencrypt/decryptincludethiscodeinyourpage
###strMyEncryptedString=EncryptString(strString)
###strMyDecryptedString=DeCryptString(strMyEncryptedString)
###Youarefreetousethiscodeaslongascreditsremaininplace
###alsoifyouimprovethiscodeletmeknow.

PrivateFunctionEncryptString(strString)
####################################################################
###CryptFunction(C)2001bySlavicKozyukgrindkore@yahoo.com###
###Arguments:strString<---Stringyouwishtoencrypt###
###Output:EncryptedHEXstring###
####################################################################

DimCharHexSet,intStringLen,strTemp,strRAW,i,intKey,intOffSet
RandomizeTimer

intKey=Round((RND*1000000)+1000000)#####KeyBitsize
intOffSet=Round((RND*1000000)+1000000)#####KeyOffSetBitsize

IfIsNull(strString)=FalseThen
strRAW=strString
intStringLen=Len(strRAW)

Fori=0tointStringLen-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=""
EndIf
EndFunction




PrivateFunctionDeCryptString(strCryptString)
####################################################################
###CryptFunction(C)2001bySlavicKozyukgrindkore@yahoo.com###
###Arguments:EncryptedHEXstringt###
###Output:DecryptedASCIIstring###
####################################################################
###NotethisfunctionusesHexConv()andget_hxno()functions###
###somakesuretheyarenotremoved###
####################################################################

DimstrRAW,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))

Fori=0toUBound(arHexCharSet)
strRAW=strRAW&Chr(HexConv(arHexCharSet(i))/intKey)
Next

DeCryptString=strRAW
EndFunction



PrivateFunctionHexConv(hexVar)
Dimhxx,hxx_var,multiply
IFhexVar""THEN
hexVar=UCASE(hexVar)
hexVar=StrReverse(hexVar)
DIMhx()
REDIMhx(LEN(hexVar))
hxx=0
hxx_var=0
FORhxx=1TOLEN(hexVar)
IFmultiply=""THENmultiply=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
ENDIF
EndFunction

PrivateFunctionget_hxno(ghx)
Ifghx="A"Then
ghx=10
ElseIfghx="B"Then
ghx=11
ElseIfghx="C"Then
ghx=12
ElseIfghx="D"Then
ghx=13
ElseIfghx="E"Then
ghx=14
ElseIfghx="F"Then
ghx=15
EndIf
get_hxno=ghx
EndFunction


%>


<%
DimImage
DimWidth,Height
Dimnum
Dimdigtal
DimLength
Dimsort
Length=4自定计数器长度

Redimsort(Length)

num=cint(DeCryptString(request.querystring("sksid")))
digital=""
ForI=1ToLength-Len(num)补0
digital=digital&"0"
Next
ForI=1ToLen(num)
digital=digital&Mid(num,I,1)
Next
ForI=1ToLen(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="#definecounter_width"&Width&hc
Image=Image&"#definecounter_height"&Height&hc
Image=Image&"staticunsignedcharcounter_bits[]={"&hc

ForI=1ToHeight
ForJ=1ToLength
Image=Image&a(sort(J),I)&","
Next
Next

Image=Left(Image,Len(Image)-1)往失落最初一个逗号
Image=Image&"};"&hc
%>
<%
Response.WriteImage

%>

num.asp

<%
Dima(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"

%>对用户来说可预见费用、节约费用,可以做到花少钱办大事。由于省去了购买软件和硬件等的前期费用,用户可以租用较高级的应用软件。ASP的收费是根据软件的类型、客制化程度、用户数量、服务期限来定的,对客户来说这笔费用是可以预见的。方便于客户应用软件的升级。
作者: 谁可相欹    时间: 2015-1-18 23:16
哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?
作者: 精灵巫婆    时间: 2015-1-25 19:37
虽然ASP也有很多网络教程。但是这些都不系统。都是半路出家,只是从一个例子告诉你怎么用。不会深入讨论,更不会将没有出现在例子里的方法都一一列举出来。
作者: 冷月葬花魂    时间: 2015-2-3 17:45
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
作者: 柔情似水    时间: 2015-2-9 04:23
他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。
作者: 愤怒的大鸟    时间: 2015-2-26 22:13
下面简单介绍一下我学习ASP的方法,希望对想学习ASP的朋友有所帮助...
作者: 第二个灵魂    时间: 2015-3-8 18:21
ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。
作者: 简单生活    时间: 2015-3-16 10:42
他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。
作者: 再见西城    时间: 2015-3-22 22:23
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2