本發(fā)明涉及一種基于hash散列表的身份認(rèn)證方法,主要用于對(duì)短文本進(jìn)行加密,在此基礎(chǔ)上用于系統(tǒng)的身份認(rèn)證,以此增加系統(tǒng)的安全性,屬于數(shù)據(jù)加密技術(shù)領(lǐng)域。
背景技術(shù):
信息安全的概念在二十世紀(jì)經(jīng)歷了一個(gè)漫長(zhǎng)的歷史階段,90年代以來(lái)得到了深化。進(jìn)入21世紀(jì),隨著信息技術(shù)的不斷發(fā)展,信息安全問(wèn)題也日顯突出。如何確保信息系統(tǒng)的安全已成為全社會(huì)關(guān)注的問(wèn)題。目前常用來(lái)管理信息的方法就是設(shè)置一個(gè)賬號(hào)和對(duì)應(yīng)的密碼,通過(guò)賬號(hào)和密碼的驗(yàn)證來(lái)實(shí)現(xiàn)信息加密。用戶在使用時(shí),在登錄框中輸入賬號(hào)和密碼,只要通過(guò)后臺(tái)驗(yàn)證無(wú)誤后即可登錄或打開(kāi)查看相應(yīng)的信息。為了提高安全性,常對(duì)密碼進(jìn)行加密。
馮萬(wàn)利,朱全銀等人已有的研究基礎(chǔ)包括:wanlifeng.researchofthemestatementextractionforchineseliteraturebasedonlexicalchain.internationaljournalofmultimediaandubiquitousengineering,vol.11,no.6(2016),pp.379-388;wanlifeng,yingli,shangbinggao,yunyangyan,jianxunxue.anovelflameedgedetectionalgorithmviaanovelactivecontourmodel.internationaljournalofhybridinformationtechnology,vol.9,no.9(2016),pp.275-282;劉金嶺,馮萬(wàn)利.基于屬性依賴(lài)關(guān)系的模式匹配方法[j].微電子學(xué)與計(jì)算機(jī),2011,28(12):167-170;劉金嶺,馮萬(wàn)利,張亞紅.初始化簇類(lèi)中心和重構(gòu)標(biāo)度函數(shù)的文本聚類(lèi)[j].計(jì)算機(jī)應(yīng)用研究,2011,28(11):4115-4117;劉金嶺,馮萬(wàn)利,張亞紅.基于重新標(biāo)度的中文短信文本聚類(lèi)方法[j].計(jì)算機(jī)工程與應(yīng)用,2012,48(21):146-150.;朱全銀,潘祿,劉文儒,等.web科技新聞分類(lèi)抽取算法[j].淮陰工學(xué)院學(xué)報(bào),2015,24(5):18-24;李翔,朱全銀.聯(lián)合聚類(lèi)和評(píng)分矩陣共享的協(xié)同過(guò)濾推薦[j].計(jì)算機(jī)科學(xué)與探索,2014,8(6):751-759;quanyinzhu,sunquncao.anovelclassifier-independentfeatureselectionalgorithmforimbalanceddatasets.2009,p:77-82;quanyinzhu,yunyangyan,jinding,jinqian.thecasestudyforpriceextractingofmobilephonesellonline.2011,p:282-285;quanyinzhu,suquncao,peizhou,yunyangyan,hongzhou.integratedpriceforecastbasedondichotomybackfillinganddisturbancefactoralgorithm.internationalreviewoncomputersandsoftware,2011,vol.6(6):1089-1093;朱全銀,馮萬(wàn)利等人申請(qǐng)、公開(kāi)與授權(quán)的相關(guān)專(zhuān)利:馮萬(wàn)利,邵鶴帥,莊軍.一種智能冷藏車(chē)狀態(tài)監(jiān)測(cè)無(wú)線網(wǎng)絡(luò)終端裝置:cn203616634u[p].2014;朱全銀,胡蓉靜,何蘇群,周培等.一種基于線性插補(bǔ)與自適應(yīng)滑動(dòng)窗口的商品價(jià)格預(yù)測(cè)方法.中國(guó)專(zhuān)利:zl201110423015.5,2015.07.01;朱全銀,曹蘇群,嚴(yán)云洋,胡蓉靜等,一種基于二分?jǐn)?shù)據(jù)修補(bǔ)與擾亂因子的商品價(jià)格預(yù)測(cè)方法.中國(guó)專(zhuān)利:zl201110422274.6,2013.01.02;李翔,朱全銀,胡榮林,周泓.一種基于譜聚類(lèi)的冷鏈物流配載智能推薦方法.中國(guó)專(zhuān)利公開(kāi)號(hào):cn105654267a,2016.06.08。
hash方法:
hash,就是把任意長(zhǎng)度的輸入,通過(guò)散列方法,變換成固定長(zhǎng)度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會(huì)散列成相同的輸出,所以不可能從散列值來(lái)唯一的確定輸入值。簡(jiǎn)單的說(shuō)就是一種將任意長(zhǎng)度的消息壓縮到某一固定長(zhǎng)度的消息摘要的函數(shù)。
散列表:
散列表,是根據(jù)關(guān)鍵碼值而直接進(jìn)行訪問(wèn)的數(shù)據(jù)結(jié)構(gòu)。也就是說(shuō),它通過(guò)把關(guān)鍵碼值映射到表中一個(gè)位置來(lái)訪問(wèn)記錄,以加快查找的速度。這個(gè)映射函數(shù)叫做散列函數(shù),存放記錄的數(shù)組叫做散列表。給定表m,存在函數(shù)f(key),對(duì)任意給定的關(guān)鍵字值key,代入函數(shù)后若能得到包含該關(guān)鍵字的記錄在表中的地址,則稱(chēng)表m為哈希表,函數(shù)f(key)為哈希(hash)函數(shù)。
身份認(rèn)證:
身份認(rèn)證也稱(chēng)為“身份驗(yàn)證”或“身份鑒別”,是指在計(jì)算機(jī)及計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)中確認(rèn)操作者身份的過(guò)程,從而確定該用戶是否具有對(duì)某種資源的訪問(wèn)和使用權(quán)限,進(jìn)而使計(jì)算機(jī)和網(wǎng)絡(luò)系統(tǒng)的訪問(wèn)策略能夠可靠、有效地執(zhí)行,防止攻擊者假冒合法用戶獲得資源的訪問(wèn)權(quán)限,保證系統(tǒng)和數(shù)據(jù)的安全,以及授權(quán)訪問(wèn)者的合法利益。
md5和sha-1是目前使用比較廣泛的散列函數(shù),也是在消息認(rèn)證和數(shù)字簽名中普遍使用的兩種加密算法。hash方法加密之后不可逆,只能通過(guò)碰撞的方式來(lái)破解,增加算法的迭代輪次可以增大碰撞的難度,但這樣同時(shí)會(huì)導(dǎo)致加密時(shí)間的增長(zhǎng)。盡管hash方法加密之后不可逆,但由于md5和sha-1被廣泛的使用以及部分服務(wù)提供商的數(shù)據(jù)泄露,導(dǎo)致使用md5或sha-1加密的短文本很容易被破解。
技術(shù)實(shí)現(xiàn)要素:
發(fā)明目的:目前常用來(lái)管理信息的方法就是設(shè)置一個(gè)賬號(hào)和對(duì)應(yīng)的密碼,通過(guò)賬號(hào)和密碼的驗(yàn)證來(lái)實(shí)現(xiàn)信息加密。針對(duì)現(xiàn)有技術(shù)中存在的問(wèn)題,本發(fā)明提供一種基于hash散列表的身份認(rèn)證方法,先使用預(yù)處理方法對(duì)初始數(shù)據(jù)進(jìn)行處理,然后使用hyhasha方法對(duì)四個(gè)初始變量做多輪迭代運(yùn)算,得到加密數(shù)據(jù),再使用hyhashb方法,根據(jù)用戶標(biāo)識(shí),對(duì)加密數(shù)據(jù)進(jìn)行二次加密,得到最終加密結(jié)果。
技術(shù)方案:一種基于hash散列表的身份認(rèn)證方法,包括如下步驟:
步驟1:對(duì)待加密數(shù)據(jù)進(jìn)行預(yù)處理,得到預(yù)處理后待加密數(shù)據(jù),所述待加密字符串為長(zhǎng)度在6到16之間的字符串,所述預(yù)處理后待加密數(shù)據(jù)為8個(gè)長(zhǎng)整型數(shù):
步驟1.1:定義用戶屬性,身份認(rèn)證所需數(shù)據(jù)項(xiàng);
步驟1.2:對(duì)待加密字符串進(jìn)行循環(huán)填充,將之填充到長(zhǎng)度為32為止;
步驟1.3:將填充完成的字符串按序轉(zhuǎn)為8個(gè)長(zhǎng)整型數(shù),并保存,用于后續(xù)的加密。
步驟2:調(diào)用hyhasha方法對(duì)預(yù)處理后待加密數(shù)據(jù)進(jìn)行初步加密,得到初步加密的數(shù)據(jù),所述hyhasha方法為一種散列函數(shù):
步驟2.1:定義非線性函數(shù)以及hash運(yùn)算過(guò)程中所需的常量;
步驟2.2:使用hyhasha方法對(duì)四個(gè)初始變量做多輪迭代運(yùn)算,得到初步加密的數(shù)據(jù)。
步驟3:調(diào)用hyhashb方法對(duì)初步加密的數(shù)據(jù)進(jìn)行二次加密,得到最終加密結(jié)果,所述hyhashb方法為一種結(jié)合哈希表進(jìn)行加密的方法:
步驟3.1:根據(jù)用戶標(biāo)識(shí)及散列表獲取加密所需的秘鑰;
步驟3.2:使用hyhashb方法對(duì)加密數(shù)據(jù)進(jìn)行二次加密,得到最終加密結(jié)果。
本發(fā)明采用上述技術(shù)方案,具有以下有益效果:本發(fā)明使用hyhash方法來(lái)對(duì)數(shù)據(jù)進(jìn)行加密,以此來(lái)提高數(shù)據(jù)的安全性,具體的:本發(fā)明使用hyhash方法來(lái)對(duì)數(shù)據(jù)進(jìn)行加密,先使用預(yù)處理方法對(duì)初始數(shù)據(jù)進(jìn)行處理,然后使用hyhasha方法對(duì)四個(gè)初始變量做多輪迭代運(yùn)算,得到加密數(shù)據(jù),再使用hyhashb方法,根據(jù)用戶標(biāo)識(shí),對(duì)加密數(shù)據(jù)進(jìn)行二次加密,得到最終加密結(jié)果。此外,本發(fā)明創(chuàng)造性地提出了利用hyhash方法對(duì)數(shù)據(jù)進(jìn)行加密,提高了數(shù)據(jù)的安全性。
附圖說(shuō)明
圖1為加密方法概述圖;
圖2為待加密字符串預(yù)處理流程圖;
圖3為hyhasha方法對(duì)完整的待加密字符串進(jìn)行加密流程圖;
圖4為利用hyhashb方法對(duì)初步加密數(shù)據(jù)進(jìn)行二次加密流程圖;
圖5為求字符串指定位置子串流程圖。
具體實(shí)施方式
下面結(jié)合具體實(shí)施例,進(jìn)一步闡明本發(fā)明,應(yīng)理解這些實(shí)施例僅用于說(shuō)明本發(fā)明而不用于限制本發(fā)明的范圍,在閱讀了本發(fā)明之后,本領(lǐng)域技術(shù)人員對(duì)本發(fā)明的各種等價(jià)形式的修改均落于本申請(qǐng)所附權(quán)利要求所限定的范圍。
如附圖2,待加密字符串預(yù)處理流程步驟1從步驟1.1到1.13:
步驟1.1:設(shè)系統(tǒng)中用戶賬戶集合user={user1,user2,…,userm},系統(tǒng)所有用戶角色集合role={role1,role2,…,rolen}和用戶可執(zhí)行的所有操作集合oper={oper1,oper2,…,operz},其中,m為系統(tǒng)中用戶總數(shù),n為系統(tǒng)中用戶角色總數(shù),z為用戶可執(zhí)行的所有操作總數(shù);
步驟1.2:設(shè)ui為第i個(gè)用戶的賬戶信息,其中,ui∈user,i<=m;設(shè)系統(tǒng)用戶密文密碼集合p={p1,p2,…,pm};根據(jù)p獲取賬號(hào)信息為ui的用戶密碼pi;設(shè)ndda={da1,da2,…,dak}為登錄操作所需的數(shù)據(jù)項(xiàng)集合,其中,k為登錄需要的數(shù)據(jù)項(xiàng)總數(shù);
步驟1.3:錄入ndda;設(shè)用戶賬戶為account,用戶明文密碼t,其中,account∈ndda,t∈ndda;
步驟1.4:設(shè)待加密字符串wstr,將t賦給wstr;
步驟1.5:設(shè)字符數(shù)組inputbytes,tmpbytes,將wstr轉(zhuǎn)為字符數(shù)組賦給inputbytes;
步驟1.6:設(shè)變量bytlen,rest,將wstr的長(zhǎng)度賦給bytlen,rest=32-bytlen;設(shè)循環(huán)變量counterx,countery,賦初值counterx為-1,賦初值countery為-1;
步驟1.7:counterx=counterx+1;
步驟1.8:當(dāng)循環(huán)變量counterx<bytlen時(shí),則執(zhí)行步驟1.9;否則執(zhí)行步驟1.10;
步驟1.9:tmpbytes[counterx]=inputbytes[counterx];
步驟1.10:countery=countery+1;
步驟1.11:當(dāng)循環(huán)變量countery<rest時(shí),則執(zhí)行1.12;否則執(zhí)行步驟1.13;
步驟1.12:tmpbytes[bytlen+countery]=
inputbytes[(countery+bytlen)%inputlen];
步驟1.13:設(shè)長(zhǎng)整型數(shù)組groups,groups長(zhǎng)度為8,將tmpbytes轉(zhuǎn)為16個(gè)long類(lèi)型的數(shù)并賦給groups;
如附圖3,利用hyhasha對(duì)預(yù)處理后的待加密字符串進(jìn)行加密得到初步加密數(shù)據(jù)流程步驟2從步驟2.1到2.16:
步驟2.1:設(shè)函數(shù)a=(x|y)&((~x)|z),設(shè)函數(shù)b=(~x)^(~y)^(~z),設(shè)函數(shù)c=x^((~y)&(~z)),設(shè)函數(shù)d=(x&z)^(x|y);
步驟2.2:設(shè)a=0xefcdab89l,b=0x89674523l,c=0x10325476l,d=0xefab6701l;設(shè)s[8]={9,11,7,3,13,17,22,14},用于hash的計(jì)算;設(shè)m[16]={0xd76aa478l.01e8c7b756l,0x242070dbl,0xc1bdceeel,0xf57c0fafl,0x4787c62al,0xa8304613l,0xfd469501l,0x698098d8l,0x8b44f7afl,0xfff5bb1l,0x895cd7bel,0x6b901122k,0xfd987193l,0xa679438el,0x49b40821l},用于hash的計(jì)算;
步驟2.3:按序依次執(zhí)行下列公式,迭代得到hash的結(jié)果,
a=b+((a+a(b,c,d)+groups[0]+m[0])<<<s[0]);
d=b+((a+b(b,c,d)+groups[1]+m[1])<<<s[1]);
c=b+((a+c(b,c,d)+groups[2]+m[2])<<<s[2]);
b=b+((a+d(b,c,d)+groups[3]+m[3])<<<s[3]);
a=b+((a+a(b,c,d)+groups[4]+m[4])<<<s[4]);
d=b+((a+b(b,c,d)+groups[5]+m[5])<<<s[5]);
c=b+((a+c(b,c,d)+groups[6]+m[6])<<<s[6]);
b=b+((a+d(b,c,d)+groups[7]+m[7])<<<s[7]);
a=b+((a+a(b,c,d)+groups[5]+m[8])<<<s[0]);
d=b+((a+b(b,c,d)+groups[2]+m[9])<<<s[1]);
c=b+((a+c(b,c,d)+groups[0]+m[10])<<<s[2]);
b=b+((a+d(b,c,d)+groups[6]+m[11])<<<s[3]);
a=b+((a+a(b,c,d)+groups[7]+m[12])<<<s[4]);
d=b+((a+b(b,c,d)+groups[1]+m[5])<<<s[5]);
c=b+((a+c(b,c,d)+groups[3]+m[14])<<<s[6]);
b=b+((a+d(b,c,d)+groups[4]+m[15])<<<s[7]);
步驟2.4:result[0]=a&0xffffffffl;result[1]=b&0xffffffffl;
result[2]=c&0xffffffffl;result[3]=d&0xffffffffl;
步驟2.5:設(shè)臨時(shí)變量tmpa,tmpb,用于存儲(chǔ)中間變量;設(shè)循環(huán)變量countera,counterb,賦初值countera為-1,賦初值counterb為-1;
步驟2.6:countera=countera+1,counterb=-1;
步驟2.7:當(dāng)循環(huán)變量countera<4時(shí),則執(zhí)行步驟2.8;否則執(zhí)行步驟2.16;
步驟2.8:counterb=counterb+1;
步驟2.9:當(dāng)循環(huán)變量counterb<4時(shí),則執(zhí)行步驟2.10;否則執(zhí)行步驟2.06;
步驟2.10:tmpa=result[countera]&0x0fl;
步驟2.11:將tmpa轉(zhuǎn)為int類(lèi)型的數(shù)并將hexs[tmpa]的值賦給tmpb,其中,hex[16]={0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f};
步驟2.12:result[i]=result[countera]>>4;
步驟2.13:tmpa=result[countera]&0x0fl;
步驟2.14:將tmpa轉(zhuǎn)為int類(lèi)型的數(shù)并將tmpstr、hexs[tmpa]和tmpb相加后的值賦給tmpstr;
步驟2.15:result[countera]=result[countera]>>4;
步驟2.16:得到最終的tmpstr;
如附圖4,利用hyhashb方法對(duì)初步加密的數(shù)據(jù)進(jìn)行二次加密流程步驟3從步驟3.1到步驟3.14:
步驟3.1:設(shè)密鑰集合key={k1,k2,…,kl};kw為第w個(gè)密鑰,其中,kw∈key,w<=l;kw由三位十六進(jìn)制數(shù)組成,kw={n1,n2,n3},其中,n1、n2和n3為十進(jìn)制數(shù);
步驟3.2:設(shè)hash函數(shù)f(x)=x/15+1,其中,自變量x為用戶賬號(hào),因變量為用戶所對(duì)應(yīng)的key;
步驟3.3:代入用戶賬號(hào)account,得到ui所對(duì)應(yīng)的key為ke;
步驟3.4:設(shè)集合length={u1,u2,u3,u4},用于表達(dá)二次加密后字符串的的各子部分的長(zhǎng)度;
步驟3.5:u0=0;u1=(n1+5)/2;u2=(n2+5)/2;u3=(n3+5)/2;u4=32-u1-u2-u3;
步驟3.6:設(shè)集合part={p1,p2,p3,p4},用于表示加密后字符串的各子串,設(shè)整數(shù)數(shù)組mm=[3,1,2,4];
步驟3.7:設(shè)循環(huán)變量counterz,給counterz賦初值0;
步驟3.8:counterz=counterz+1;
步驟3.9:將counterz賦給x1即步驟3.11.1到步驟3.11.6中的fvalue,將tmpstr轉(zhuǎn)為字符數(shù)組后賦給x1即步驟3.11.1到步驟3.11.6中的initstr;
步驟3.10:當(dāng)循環(huán)變量counterz<5時(shí),則執(zhí)行步驟3.11,否則執(zhí)行步驟3.13;
步驟3.11:執(zhí)行x1即步驟3.11.1到步驟3.11.6;
步驟3.12:將x1即步驟3.11.1到步驟3.11.6的執(zhí)行結(jié)果restr賦給pmm[counterz];
步驟3.13:設(shè)變量tstr,tstr=p3+p1+p2+p4;
步驟3.14:得到最終的秘鑰即tstr;
如附圖5,求字符串指定位置子串流程步驟3.11從步驟3.11.1到3.11.6:
步驟3.11.1:設(shè)restr為空字符串;
步驟3.11.2:設(shè)循環(huán)遍歷counters,counters賦初值為-1;
步驟3.11.3:counters=counters+1;
步驟3.11.4:當(dāng)循環(huán)變量counters<fvalue時(shí),則執(zhí)行步驟3.11.5;否則執(zhí)行步驟3.11.6;
步驟3.11.5:restr=restr+initstr[fvalue-1+counters];
步驟3.11.6:得到restr;
其中,先使用預(yù)處理方法對(duì)初始數(shù)據(jù)進(jìn)行處理,然后使用hyhasha方法對(duì)四個(gè)初始變量做多輪迭代運(yùn)算,得到加密數(shù)據(jù),再使用hyhashb方法,根據(jù)用戶標(biāo)識(shí),對(duì)加密數(shù)據(jù)進(jìn)行二次加密,得到最終加密結(jié)果。
其中,步驟1.3到步驟1.12是提供加密方法所需的初始數(shù)據(jù);步驟2.1到步驟2.3是根據(jù)原始數(shù)據(jù)計(jì)算初步加密結(jié)果;步驟2.4到步驟2.16是將初步加密結(jié)果轉(zhuǎn)為32位十六進(jìn)制的字符串;步驟3.1到步驟3.13是對(duì)初步加密結(jié)果使用hyhashb方法進(jìn)行二次加密;步驟3.11.1到步驟3.11.6是求字符串指定位置子串。
本發(fā)明可與計(jì)算機(jī)系統(tǒng)結(jié)合,從而完成系統(tǒng)安全的防護(hù)。
通過(guò)hyhash對(duì)22271條弱口令密碼進(jìn)行加密,總計(jì)耗時(shí)156ms;使用md5對(duì)同樣的數(shù)據(jù)進(jìn)行加密,耗時(shí)216ms;使用sha-1對(duì)同樣的數(shù)據(jù)進(jìn)行加密,耗時(shí)238ms。使用在線加密工具對(duì)結(jié)果進(jìn)行測(cè)試,使用hyhash加密的數(shù)據(jù)共有0%的密碼被正確解密;使用md5加密的數(shù)據(jù)共有93%的數(shù)據(jù)被正確解密;使用sha-1加密的數(shù)據(jù)共有85%的數(shù)據(jù)被正確解密。通過(guò)hyhash方法對(duì)20007條強(qiáng)密碼數(shù)據(jù)進(jìn)行加密,總計(jì)耗時(shí)113ms;使用md5加密對(duì)同樣的數(shù)據(jù)進(jìn)行加密,耗時(shí)179ms;使用sha-1對(duì)同樣的數(shù)據(jù)進(jìn)行加密,耗時(shí)228ms。使用在線加密工具對(duì)結(jié)果進(jìn)行測(cè)試,使用hyhash加密的數(shù)據(jù)共有0%的密碼被正確解密;使用md5加密的數(shù)據(jù)共有3%的數(shù)據(jù)被正確解密;使用sha-1加密的數(shù)據(jù)共有1%的數(shù)據(jù)被正確解密。
本發(fā)明創(chuàng)造性地提出了利用hyhash方法對(duì)身份數(shù)據(jù)進(jìn)行加密,以此來(lái)提高數(shù)據(jù)的安全性;其中,創(chuàng)造性的提出了hyhash方法,將待加密字符串循環(huán)填充為定長(zhǎng)字符串,在將該字符串切割為一批等長(zhǎng)的子字符串,調(diào)用hyhasha方法對(duì)這一批字符串進(jìn)行加密,得到初步的加密數(shù)據(jù),再使用hyhashb方法對(duì)初步的加密數(shù)據(jù)進(jìn)行二次加密,得到加密后的數(shù)值,具有加密復(fù)雜度高,加密速度快,解決了現(xiàn)有加密方法安全性不高、效率較低的問(wèn)題,具有很高的實(shí)用價(jià)值。