ASP產生數字相加求和的BMP圖片驗證碼

來源:互聯網
上載者:User

目前網路上有許多圖片驗證碼形式,那些沒有產生圖片的驗證碼的抗破解防禦能力簡直不堪一擊;有人直接在網頁源碼裡顯示出具體的數字,然後要求訪問者輸入一個相加後的和;如3+5=多少,這樣的驗證碼新意倒有一些,不過可惜,根本沒有起到保護的作用。

flymorn改進一下以上的新意,直接把3+6=多少的形式採用asp程式產生Bmp圖片格式,並且把數字相加後的和存進session裡,加大破解的門檻;沒有一些圖形映像學知識的人是無法破解的。代碼如下:
複製代碼 代碼如下:<%
Response.Buffer = True
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0
Response.cachecontrol = "no-cache"

Response.ContentType = "Image/Bmp"

Call Com_CreatValidCode()

Sub Com_CreatValidCode()

Randomize

Dim i, ii, iii

Const cAmount = 10 '數值個數

Const cCode = "0123456789" '數值範圍

Dim vColorData(2)

vColorData(0) = "" '黑色點要轉為彩色點,暫時不定義

vColorData(1) = ChrB(255) & ChrB(255) & ChrB(255) '白點

Dim vCode(4), vCodes '產生一組任意數

For i = 0 To 3

vCode(i) = Int(Rnd * cAmount) '數組等於總數*隨機數

if i=1 then vCode(i)="11" '第二位為+

if i=3 then vCode(i)="10" '第四位為=

vCodes=vCodes&Mid(cCode,vCode(i)+1,1) '串等於串加上後續值

Next

session("checkcode")=int(Mid(vCodes,1,1)) + int(Mid(vCodes,2,1)) '計算相加和值並賦值給session

Dim vNumberData(36)

vNumberData(0) =

"1110000111110111101111011110111101111011110111101111011110111101111011110111101111011110111110000111"

vNumberData(1) =

"1111011111110001111111110111111111011111111101111111110111111111011111111101111111110111111100000111"

vNumberData(2) =

"1110000111110111101111011110111111111011111111011111111011111111011111111011111111011110111100000011"

vNumberData(3) =

"1110000111110111101111011110111111110111111100111111111101111111111011110111101111011110111110000111"

vNumberData(4) =

"1111101111111110111111110011111110101111110110111111011011111100000011111110111111111011111111000011"

vNumberData(5) =

"1100000011110111111111011111111101000111110011101111111110111111111011110111101111011110111110000111"

vNumberData(6) =

"1111000111111011101111011111111101111111110100011111001110111101111011110111101111011110111110000111"

vNumberData(7) =

"1100000011110111011111011101111111101111111110111111110111111111011111111101111111110111111111011111"

vNumberData(8) =

"1110000111110111101111011110111101111011111000011111101101111101111011110111101111011110111110000111"

vNumberData(9) =

"1110001111110111011111011110111101111011110111001111100010111111111011111111101111011101111110001111"

'表示=
vNumberData(10) =

"1111111111111111111111111111111000000001111111111111111111111000000001111111111111111111111111111111"
'表示+
vNumberData(11) =

"1111111111111100111111110011111111001111100000000110000000011111001111111100111111110011111111111111"

Response.BinaryWrite ChrB(66) & ChrB(77) & ChrB(230) & ChrB(4) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) &_

ChrB(0) & ChrB(0) & ChrB(54) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) &_

ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(10) & ChrB(0) &_

ChrB(0) & ChrB(0) & ChrB(1) & ChrB(0)

Response.BinaryWrite ChrB(24) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(176) & ChrB(4) &_

ChrB(0) & ChrB(0) & ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & ChrB(18) & ChrB(11) &_

ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) &_

ChrB(0) & ChrB(0)

For i = 9 To 0 Step -1 '行

For ii = 0 To 3 '字數

For iii = 1 To 10 '像素點

if Mid(vNumberData(vCode(ii)), i * 10 + iii , 1) ="0" then '產生彩色點,減去一個固定值,可使顏色偏深

dim a,b,c

a=abs(Rnd * 256-60)

b=abs(Rnd * 256-128)

c=abs(Rnd * 256-60)

vColorData(0) = ChrB(a) & ChrB(b) & ChrB(c)

Response.BinaryWrite vColorData(Mid(vNumberData(vCode(ii)), i * 10 + iii , 1))

else

dim d,e,f '產生彩色背景,顏色偏淺,也可以隨機產生噪點做背景

d=abs(Rnd * 255)

e=abs(Rnd * 255)

f=abs(Rnd * 255)

if d+e+f>640 then '可改值,調整背景色深

vColorData(1) = ChrB(d) & ChrB(e) & ChrB(f)

Response.BinaryWrite vColorData(Mid(vNumberData(vCode(ii)), i * 10 + iii , 1))

else

Response.BinaryWrite vColorData(Mid(vNumberData(vCode(ii)), i * 10 + iii , 1))

end if

end if

Next

Next

Next

End Sub
%>

以上代碼可直接另存新檔一個檔案,如vcode.asp,然後通過圖片的方式調用改檔案,如<img src="vcode.asp" border=0 align="absmiddle" />,然後在提交後的處理頁面裡驗證session("checkcode")的值就可以了。這個代碼是flymorn自己改進的,原始的參考代碼請直接在google裡搜尋“用ASP產生Bmp圖片”,或查看這個網址,可以找到一些相關的。

最後,就是“5+6=”這樣的隨機數字相加的形式產生在bmp圖片裡了,它們的和需要你計算後填入,以達到驗證的功能,防止機器蹂躪你的網站。如果你也關心asp圖片驗證碼,歡迎留言,讓我們一起交流。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.