<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: 博客園 模板提供:滬江博客
    主站蜘蛛池模板: 亚洲激情黄色小说| 色婷婷六月亚洲综合香蕉| 免费在线观看h片| 亚洲AV无码一区二区乱子仑| 亚洲婷婷国产精品电影人久久| 久久这里只精品99re免费| 国产亚洲国产bv网站在线| 亚洲高清国产拍精品青青草原| 午夜爽爽爽男女免费观看影院| 亚洲日韩AV无码一区二区三区人| 国产亚洲大尺度无码无码专线| 国产91色综合久久免费分享| 污污污视频在线免费观看| 亚洲黄色中文字幕| 亚洲男人天堂2020| 成人女人A级毛片免费软件| 有码人妻在线免费看片| 亚洲免费中文字幕| 国产亚洲美女精品久久久2020 | 伊人免费在线观看| 亚洲色精品三区二区一区| 国产亚洲精品自在久久| 色播在线永久免费视频| **俄罗斯毛片免费| 国产美女视频免费观看的网站| 亚洲国产乱码最新视频| 视频一区在线免费观看| 久久丫精品国产亚洲av不卡| 免费一级成人毛片| 男人的好看免费观看在线视频| 毛片在线全部免费观看| 国产A∨免费精品视频| 亚洲精品无码aⅴ中文字幕蜜桃| 亚洲国产一区国产亚洲| 亚洲中文久久精品无码ww16| 国产一级淫片视频免费看| 18禁网站免费无遮挡无码中文| 国产免费无码AV片在线观看不卡 | 亚洲精品免费网站| 久久精品一区二区免费看| 美女无遮挡拍拍拍免费视频|