<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的人生路  
    日歷
    <2005年7月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456
    統計
    • 隨筆 - 74
    • 文章 - 57
    • 評論 - 7
    • 引用 - 0

    導航

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    顏色

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

     

    要讀懂這些代碼主要是要了解ASP中操作二進制數據的對象ADODB.Stream!本程序主要用的就是Adodb.Stream,如果你有這個基礎,就可以進一步添加更多的功能如加入雜點,漸變底色,數字行列錯位,筆畫短點,提高被ocr識別的不可能。目前還沒有好的識別引擎,昨天下載了個號稱能識別圖像驗證碼90%的!把4321識別成 89910,所以圖像碼還是比較安全的。

    在網上看到有暴力破解的方法,如果我用圖像附加碼+禁止外部提交+10次密碼錯誤封帳號 +50次密碼錯誤瑣死IP+10秒的防刷新間隔注冊頁,登陸頁均要加上+禁止外部提交,這樣,暴力破解應該就沒戲了。

    Asp文件:Code.Asp
    數據文件:body.Fix , Head.Fix
    用法:<img src="code.asp">

    Response.buffer = true
    NumCode

    Function NumCode()
    Response.Expires = -1
    Response.AddHeader "Pragma","no-cache"
    Response.AddHeader "cache-ctrol","no-cache"
    dim zNum,i,j
    dim Ados,Ados1
    Randomize timer
    生成隨機四位數字:
    zNum = cint(8999*Rnd+1000)
    傳遞給session
    Session("GetCode") = zNum
    該for循環是將隨機數字放入一個下標3的數組,便于提供給后面的陣列變換
    dim zimg(3),NStr
    NStr=cstr(zNum)
    For i=0 to 3
    zimg(i)=cint(mid(NStr,i+1,1))
    Next
    dim Pos

    '定義二個 ADODB.Stream binary對象,作圖像數據操作之用:

    set Ados=Server.CreateObject("Adodb.Stream")
    Ados.Mode=3
    Ados.Type=1
    Ados.Open
    set Ados1=Server.CreateObject("Adodb.Stream")
    Ados1.Mode=3
    Ados1.Type=1
    Ados1.Open
    '載入0~9的數字數據10x100的,Gbr的陣列數據,每個320字節,10個數字3200byte
    'BGR一個點,10x10個點一個數字,一個點三個字節(二進制8位,16進制 00~FF)
    '一行10個點 30字節 + 行結束標記 00 00 二字節 32字節,所以一個10x100寬小于長的圖像每個數字10x10是320字節
    '長大于寬的則無行結束標記 0000,直接是300字節
    這些就是BMP 24bit的數據詳細信息了
    ‘至于頭部,也很簡單,包含長寬,圖像開始標記等等~~才54字節,遠沒jpg什么的復雜

    Ados.LoadFromFile(Server.mappath("body.Fix"))
    Ados1.write Ados.read(1280)
    '第一個for循環,按生成的隨機數字順序從 10X100的數字陣列中提取出相應的四個數字
    但是豎排的數字陣列
    for i=0 to 3
    Ados.Position=(9-zimg(i))*320
    Ados1.Position=i*320
    Ados1.write ados.read(320)
    next
    '清空已經用完的ADOS的數據,調入替換新的圖像頭54字節的頭文件
    Ados.LoadFromFile(Server.mappath("head.fix"))
    Pos=lenb(Ados.read())
    Ados.Position=Pos '指定Pos位置,即可再偏移54字節的位置添加圖形數據
    第二個for循環,進行數字的陣列變換,由豎排的塊轉換為橫排的數字塊
    方法是隔320字節抽取4次30字節寫入ados對象,再抽取偏移第二行的圖像數據
    30字節是因為bmp 寬大于長時無00 00的行結束標記
    for i=0 to 9 step 1
    for j=0 to 3
    Ados1.Position=i*32+j*320
    Ados.Position=Pos+30*j+i*120
    Ados.write ados1.read(30)
    next
    next
    Ados.Position=0
    response.BinaryWrite直接向客戶端發送圖像數據
    Response.ContentType = "image/BMP"
    Response.BinaryWrite Ados.read()
    Ados.Close:set Ados=nothing
    Ados1.Close:set Ados1=nothing
    End Function



    歡迎大家訪問我的個人網站 萌萌的IT人
    posted on 2005-07-07 14:49 一天一點愛戀 閱讀(150) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
     
    Copyright © 一天一點愛戀 Powered by: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 男女啪啪永久免费观看网站| 亚洲w码欧洲s码免费| 亚洲国产精品成人久久| 久久亚洲AV成人无码国产最大| 黄色网址免费观看| 亚洲成人免费在线观看| 精品国产无限资源免费观看| 亚洲香蕉久久一区二区| 成年女人免费v片| 一本久久综合亚洲鲁鲁五月天| 亚洲av乱码中文一区二区三区| 色吊丝永久在线观看最新免费| 亚洲AV色无码乱码在线观看| 免费播放特黄特色毛片| 九九免费精品视频在这里| 亚洲中久无码永久在线观看同| 99久久成人国产精品免费| 亚洲最新永久在线观看| AV大片在线无码永久免费| 亚洲高清中文字幕免费| 国产做国产爱免费视频| 亚洲综合在线观看视频| 免费看男女下面日出水来| 亚洲日韩国产一区二区三区在线| 日本黄色免费观看| a一级爱做片免费| 亚洲自偷自拍另类图片二区| 天天操夜夜操免费视频| 人妻免费久久久久久久了| 在线观看成人免费| 免费人妻精品一区二区三区| 亚洲爆乳精品无码一区二区三区| 色老头永久免费网站| 在线精品自拍亚洲第一区| 亚洲精品国产字幕久久不卡| 无码国产精品一区二区免费式影视 | 狼友av永久网站免费观看| jizz免费在线观看| 亚洲毛片免费观看| 精品亚洲一区二区三区在线观看 | 一个人免费观看www视频|