亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于MD5的驗證碼生成及反破解策略的研究

        2015-04-29 00:00:00樊肖繁
        今日湖北·中旬刊 2015年4期

        一、背景資料

        1、1MD5加密技術(shù)的介紹

        MD5的全稱是message-digest algorithm5(信息-摘要算法),在90年代初由mitlaboratory for computer science和rsa data security inc的ronaldl_rivest開發(fā)出來,經(jīng)MD2、MD3和MD4發(fā)展而來,它的作用是讓大容量信息在用數(shù)字簽名軟件簽署私人密匙前被\"壓縮\"成一種保密的格式,即把一個任意長度的字節(jié)串變換成一定長的大整數(shù)信息摘要(message-digest),以防止被篡改。對MD5算法簡要的敘述可以為:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經(jīng)過了一系列的處理后,算法的輸出由四個32位分組組成,將這四個32位分組級聯(lián)后將生成一個128位散列值。由于MD5算法的使用不需要支付任何版權(quán)費(fèi)用的,且不能通過逆向算法得到明文,此加密算法已被廣泛應(yīng)用于加密、解密以及數(shù)字簽名技術(shù)中。

        2、驗證碼簡介

        驗證碼(CAPTCHA)是\"Completely Automated Public Turing test to tell Computers and Humans Apart\"(全自動區(qū)分計算機(jī)和人類的圖靈測試)的縮寫,是一種區(qū)分用戶是計算機(jī)還是人的公共全自動程序??梢苑乐梗簮阂馄平饷艽a、刷票、論壇灌水,有效防止某個黑客對某一個特定注冊用戶用特定程序暴力破解方式進(jìn)行不斷的登陸嘗試,實(shí)際上用驗證碼是現(xiàn)在很多網(wǎng)站通行的方式(比如招商銀行的網(wǎng)上個人銀行,百度社區(qū)),我們利用比較簡易的方式實(shí)現(xiàn)了這個功能。

        3、國內(nèi)外研究現(xiàn)狀

        談到驗證,便立即聯(lián)想到驗證碼,但如何生成驗證碼,對于軟件的設(shè)計者是一個十分關(guān)鍵的問題。通常而言,常見的驗證碼幾種形式:(1)CSDN網(wǎng)站用戶登錄用的是GIF格式,目前常用的隨機(jī)數(shù)字圖片驗證碼。圖片上的字符比較中規(guī)中矩,驗證作用比上一個好。沒有基本圖形圖像學(xué)知識的人,不可破。(2)MS的hot-mail申請時候的是BMP格式,隨機(jī)數(shù)字+隨機(jī)大寫英文字母+隨機(jī)干擾像素+隨機(jī)位置。(3)四位數(shù)字和字母,可能都是字母,也可能都是數(shù)字,隨機(jī)的4位字符串,最原始的驗證碼,驗證作用幾乎為零。(4)韓文或日文,現(xiàn)在跑跑HF上MS注冊都要打韓文的,這更增加了難度,要去修學(xué)下才行。(5)Google的G-mail注冊時候的是JPG格式,隨機(jī)英文字母+隨機(jī)顏色+隨機(jī)位置+隨機(jī)長度。(6)其他各大論壇的是XBM格式,內(nèi)容隨機(jī)。(7)廣告驗證碼:輸入廣告中的部分內(nèi)容即可,特點(diǎn)是可以給網(wǎng)站帶來額外收入,也可以使使用者耳目一新。(8)問題驗證碼:問題驗證碼主要是以問答式的形式來進(jìn)行填寫。(9)短信驗證碼利用短信驗證碼來注冊會員,大大降低了非法注冊,爛注冊的數(shù)據(jù)。本文主要討論第三種方式的實(shí)現(xiàn)。

        二、驗證碼的設(shè)計與實(shí)現(xiàn)

        1、設(shè)計思想

        短信驗證碼接口實(shí)現(xiàn)通常以如下方式:以速達(dá)移動的短信接口為例,一般支持http和webservice調(diào)用。程序員在需要發(fā)送短信的地方添加接口地址和相關(guān)參數(shù),如接收端手機(jī)號碼、接收的內(nèi)容以及其他接口參數(shù),調(diào)用完就會返回xml數(shù)據(jù),表示成功提交或者失敗。關(guān)于回復(fù)短信,會綁定到一個接收回復(fù)內(nèi)容的地址,有短信回復(fù)過來就推送到對應(yīng)地址。

        為了設(shè)計出一種較好安全的驗證碼,需要了解一下驗證碼的特性。首先,驗證碼要有隨機(jī)性,即驗證碼每一次生成的都不一樣。其次,驗證碼需要有模糊性,驗證碼對于人類用戶而言是可辨認(rèn),對于人工智能計算機(jī)用戶而言無法辨識,即達(dá)到圖靈測試的目的。再次,驗證碼要有保密性,即不易被他人破解。

        基于驗證碼的這些特點(diǎn),所用的設(shè)計思路是:(1)通過獲取當(dāng)前時間片信息得到相對唯一的標(biāo)記碼(在具體實(shí)現(xiàn)過程中表現(xiàn)為隨機(jī)數(shù)種子);(2)采用MD5加密技術(shù),將由標(biāo)記碼生成的隨機(jī)數(shù)字添加干擾信息生成驗證碼。

        2、獲取當(dāng)前時間片信息

        本文采集計當(dāng)前時間片信息是由系統(tǒng)當(dāng)前的時間片組成,具有唯一性,防止在生成過程中因為時間變化導(dǎo)致隨機(jī)數(shù)和驗證碼校驗失敗,選擇最小時間片單位為分鐘。下面是部分代碼:

        Int seed = currentTime.Year + currentTime.Month + currentTime.Day + currentTime.Hour + currentTime.Minute;//獲得系統(tǒng)時間,作為生成隨機(jī)數(shù)的種子

        Stringsb=\"\";//裝載生成的隨機(jī)數(shù)

        Random random=new Random(seed);//調(diào)用種子生成隨機(jī)數(shù)

        String rn=\"0123456789\";

        for(inti=0;i<20;i++)

        {

        sb+=rn.Substring((random.Next(rn.Length)),1);

        }

        string Encrypt_PWD = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s + sb, \"MD5\");

        3、驗證碼的實(shí)現(xiàn)

        將時間片信息用公開的MD5加密算法進(jìn)行加密,即可得到驗證碼。采用VS2012里面的.Ashx類型文件制作的驗證碼并嵌入到相應(yīng)的頁面,如圖所示。因為此方法選擇的時間片基本單位為分鐘,在人類的有效反應(yīng)時間內(nèi),故也可應(yīng)用在動態(tài)驗證過程中。驗證碼隨機(jī)字符串生成的部分代碼:

        private string GenerateCheckCode(HttpContext context)

        {

        int number;

        char code;

        string checkCode = String.Empty;

        System.Random random = new Random();

        for (int i = 0; i < 6; i++)

        {

        number = random.Next();

        if (number % 2 == 0)

        code = (char)('0' + (char)(number % 10));

        else if (number % 3 == 0)

        code = (char)('A' + (char)(number % 26));

        else

        code = (char)('a' + (char)(number % 26));

        checkCode += code.ToString();

        }

        context.Response.Cookies.Add(new HttpCookie(\"CheckCode\", checkCode)); return checkCode;

        }

        三、驗證碼反破解策略的研究

        1、驗證碼的破解

        使用php破解驗證碼,只有一種方法,就是收集驗證碼里出現(xiàn)字符的特征碼,然后想辦法分離出驗證碼里的字符。什么人工智能,顯然是php做不到的,所以,只要能收集齊驗證碼里出現(xiàn)字符的特征碼,又能找到方法分離出驗證碼里的字符,就可以破解。

        例如圖中,左側(cè)為原字符,右側(cè)為添加干擾信息后的字符,將兩幅圖進(jìn)行異或運(yùn)算得到下方點(diǎn)陣,點(diǎn)陣中白點(diǎn)越多字符的匹配度越高。利用此種方式就能進(jìn)行驗證碼的猜測破解。

        2、反破解策略

        反破解的思路也主要是圍繞這兩步,使用更多的字符,比如使用中文,使用更多的字體和變形,使得同一個字符有多個特征碼,或者沒有固定的特征碼。增加分離字符的難度,字符出現(xiàn)在驗證碼中的位置不固定,大小不固定,間距不固定,干擾像素要能起到作用。故可以采用下面的方(下轉(zhuǎn)第80頁)(上接第58頁)式添加干擾信息。

        為生成的隨機(jī)碼添加干擾信息

        本文采用的干擾信息添加主要分為畫圖片的清空圖片背景色、背景噪音線、畫圖片的前景噪音點(diǎn)、畫圖片的邊框線。下面是部分代碼:

        private void CreateCheckCodeImage(string checkCode, HttpContext context)

        {

        if (checkCode == 1 || checkCode.Trim() == String.Empty)

        return;

        System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);

        Graphics g = Graphics.FromImage(image);

        try

        {

        //生成隨機(jī)生成器

        Random random = new Random(Encrypt_PWD);

        //清空圖片背景色

        g.Clear(Color.White);

        //畫圖片的背景噪音線

        for (int i = 0; i < 25; i++)

        {

        int x1 = random.Next(image.Width);

        int x2 = random.Next(image.Width);

        int y1 = random.Next(image.Height);

        int y2 = random.Next(image.Height);

        g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);

        }

        Font font = new System.Drawing.Font(\"Arial\", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));

        System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);

        g.DrawString(checkCode, font, brush, 2, 2);

        //畫圖片的前景噪音點(diǎn)

        for (int i = 0; i < 100; i++)

        {

        int x = random.Next(image.Width);

        int y = random.Next(image.Height);

        image.SetPixel(x, y, Color.FromArgb(random.Next()));

        }

        //畫圖片的邊框線

        g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);

        System.IO.MemoryStream ms = new System.IO.MemoryStream();

        image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);

        context.Response.ClearContent();

        context.Response.ContentType = \"image/Gif\";

        context.Response.BinaryWrite(ms.ToArray());

        }

        finally

        {

        g.Dispose();

        image.Dispose();

        }

        }

        效果如下圖:

        四、結(jié)語

        本文討論的是一種動/靜態(tài)驗證碼的實(shí)現(xiàn),即以獲取系統(tǒng)當(dāng)前時間片信息,以MD5為加密算法控制隨機(jī)字符串生成,添加適度干擾信息最終生成驗證碼。并在Windows7系統(tǒng)中測試通過。該注冊碼具有如下特點(diǎn):

        (1)通過WindowsAPI函數(shù)currentTime()和WebControls()提取系統(tǒng)當(dāng)前時間片信息,所以能保證驗證碼生成的唯一性、特定性;

        (2)由于驗證信息具有唯一性,實(shí)現(xiàn)了“一次一碼”的要求,控制時間片信息精度,避免了因驗證超時失效的情況;

        (3)該方法稍加修改并嵌入加入了改良過的干擾信息,使得猜測破解方式難度更大,使驗證碼更符合圖靈測試所達(dá)到的要求。

        (作者單位:青島科技大學(xué)信息科學(xué)技術(shù)學(xué)院)

        日韩成人无码一区二区三区| 国产在线观看视频一区二区三区| 东北女人啪啪对白| 久久www免费人成—看片| 99久久久无码国产精品9| 亚洲国产剧情一区在线观看| 人妻少妇中文字幕专区| 成人区人妻精品一区二区三区| 野狼第一精品社区| 狠狠躁狠狠躁东京热无码专区| 偷拍一区二区三区在线观看| 精品国产一区二区三区18p| 97精品超碰一区二区三区| 亚洲精品国产综合一线久久| 国产免费人成视频在线观看播放| 国产成人大片在线播放| 无码欧美毛片一区二区三| 少妇精品无码一区二区三区| 国产在线观看不卡网址| 久久国产精品亚洲va麻豆| 帮老师解开蕾丝奶罩吸乳视频 | 成人欧美一区二区三区a片| 中字亚洲国产精品一区二区| 亚洲午夜精品第一区二区| 精品国产青草久久久久福利| 中文字幕无码无码专区| 日本一区二区三区资源视频| 色婷婷精品久久二区二区蜜臀av| 国产农村妇女毛片精品久久| 亚洲不卡无码高清视频| 日本高清成人一区二区三区| 日韩人妻少妇一区二区三区| 国产免费午夜a无码v视频| 岛国视频在线无码| 青草久久婷婷亚洲精品| 国产农村妇女毛片精品久久| 国产免费看网站v片不遮挡| 日产国产精品亚洲高清| 绝顶潮喷绝叫在线观看 | 精品三级久久久久久久| 一道之本加勒比热东京|