

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1/ 17目錄摘要 .3一、目的與意義 .4二、 DES 概述. 5三、 DES 加解密算法原理. 71. 加密.62子密鑰生成. 113.解密. 13四、. 加解密算法的實(shí)現(xiàn) 141軟件版本. 142. 平臺(tái). 143. 源代碼. 144. 運(yùn)行結(jié)果.24五、總結(jié). 25【摘要】1973 年 5 月 15 日,美國(guó)國(guó)家標(biāo)準(zhǔn)局 現(xiàn)在的美國(guó)國(guó)家標(biāo)準(zhǔn)就是研究所,即NIST)在聯(lián)邦記錄中公開征集密碼體制,這一舉措最終導(dǎo)致了數(shù)據(jù)加密標(biāo)準(zhǔn)DES)的出現(xiàn),它曾經(jīng)成為世界上最廣泛使用的密碼體制。 DES 由 IBM 開發(fā),它是早期被稱為 Lucifer 體制的改進(jìn)。 DES 在 1975 年 3 月 17
2、日首次在聯(lián)邦 記錄中公布,在經(jīng)過(guò)大量的公開討論后, 1977 年 2 月 15 日 DES 被采納為“非密級(jí)”應(yīng)用的一個(gè)標(biāo)準(zhǔn)。最 初預(yù)期 DES作為標(biāo)準(zhǔn)只能使用 1015 年;然而,事實(shí)證明 DES 要長(zhǎng)壽得多。被采納后,大約每隔5 年就被評(píng)審一次。 DES 的最后一次評(píng)審是在 1999 年 1 月。b5E2RGbCAP本文闡述了 DES 發(fā)展現(xiàn)狀及對(duì)網(wǎng)絡(luò)安全的重要意義,并在此基礎(chǔ)上對(duì) DES 算法原理進(jìn)行詳細(xì)的介紹和 分析。通過(guò)應(yīng)用 DES 算法加解密的具體實(shí)現(xiàn),進(jìn)一步加深對(duì) DES 算法的理解,論證了 DES 算法具有加密 快速且強(qiáng)壯的優(yōu)點(diǎn),適合對(duì)含有大量信息的文件進(jìn)行加密,同時(shí)分析了DE
3、S 算法密鑰過(guò)短 56 位)所帶來(lái)的安全隱患。p1EanqFDPw【關(guān)鍵詞】 DES 加密 解密 明文 密文2/ 17一 、 目的與意義 隨著計(jì)算機(jī)和通信網(wǎng)絡(luò)的廣泛應(yīng)用, 信息的安全性已經(jīng)受到人們的普遍重視。 信息安全已不僅僅局限于政 治,軍事以及外交領(lǐng)域,而且現(xiàn)在也與人們的日常生活息息相關(guān)?,F(xiàn)在,密碼學(xué)理論和技術(shù)已得到了迅速 的發(fā)展,它是信息科學(xué)和技術(shù)中的一個(gè)重要研究領(lǐng)域。在近代密碼學(xué)上值得一提的大事有兩件:一是 1977 年美國(guó)國(guó)家標(biāo)準(zhǔn)局正式公布實(shí)施了美國(guó)的數(shù)據(jù)加密標(biāo)準(zhǔn)DES ),公開它的加密算法,并批準(zhǔn)用于非機(jī)密單位及商業(yè)上的保密通信。密碼學(xué)的神秘面紗從此被揭開。二是 Diffie 和
4、Hellman 聯(lián)合寫的一篇文章 “密碼學(xué)的新方向”,提出了適應(yīng)網(wǎng)絡(luò)上保密通信的公鑰密碼思想,拉開了公鑰密碼研究的序幕。DXDiTa9E3dDESvData Encryption Standard)是 IBM 公司于上世紀(jì) 1977 年提出的一種數(shù)據(jù)加密算法。在過(guò)去近三十年 的應(yīng)用中,還無(wú)法將這種加密算法完全、徹底地破解掉。而且這種算法的加解密過(guò)程非常快,至今仍被廣 泛應(yīng)用,被公認(rèn)為安全的。雖然近年來(lái)由于硬件技術(shù)的飛速發(fā)展,破解DES 已經(jīng)不是一件難事,但學(xué)者們似 乎不甘 心讓這 樣一個(gè) 優(yōu)秀 的 加密 算法 從此廢 棄不用 ,于 是 在 DES 的 基礎(chǔ) 上有開 發(fā)了雙 重DESDouble
5、DES,DDES ) 和三重 DESTriple DES,TDES ) 。RTCrpUDGiT在國(guó)內(nèi), 隨著三金工程尤其是金卡工程的啟動(dòng),DES算法在 POS、ATM 、磁卡及智能卡 。其中 Li 和 Ri 分別表示第 i 輪的左半部和右半 部。f(是運(yùn)算函數(shù),Ki 是長(zhǎng)為 48 位的子密鑰。子密鑰 K1,K2,K16 是根據(jù) 56 比特的密鑰 K 計(jì)算而 來(lái)的。LDAYtRyKfE對(duì)比特串 R16L16 使用逆置換 IP-1 得到密文。在 DES 被提出時(shí),曾出現(xiàn)過(guò)很多批評(píng),其中之一就是針對(duì) S 盒。 DES 里的所有計(jì)算,除了 S 盒,全是線性的也就是說(shuō),計(jì)算兩個(gè)輸出的異或與先將兩個(gè)對(duì)應(yīng)輸
6、入異或再計(jì)算其輸出是相同的。作為非線性部分,S 盒對(duì)密碼體制的安全性至關(guān)重要。在DES 剛提出時(shí)就有人懷疑 S 盒里隱藏了 “陷門 vtrapdoor)”,而美 國(guó)國(guó)家安全局能夠輕易的解密消息。當(dāng)然,無(wú)法否定這樣的猜測(cè),但到目前為止也沒(méi)有任何證據(jù)能證明DES 里有陷門。事實(shí)上,后來(lái)表明DES 里的 S 盒是被設(shè)計(jì)來(lái)防止模型攻擊的。對(duì)DES 最中肯的批評(píng)是,密鑰空間的規(guī)模是 256,對(duì)實(shí)際安全而言確實(shí)太小了。對(duì)于窮舉法,一臺(tái)每毫秒執(zhí)行一次DES 加密的計(jì)算機(jī)需要一千年才能破解密文。然而,早在1977 年 Diffie 和 Hellman 就指出,若用現(xiàn)有技術(shù)造一臺(tái)并行3/ 17機(jī),它帶有 1 百
7、萬(wàn)個(gè)加密機(jī),每個(gè)加密機(jī)都可以每毫秒執(zhí)行一次DES 加密,那么窮舉時(shí)間大約10 小時(shí)。他們估計(jì)這臺(tái)計(jì)算機(jī)造價(jià)兩千萬(wàn)。1998 年 7 月當(dāng) EFF(Electronic Frontier Foundation宣布一臺(tái)造價(jià)不到 25萬(wàn)美元、為特殊目的設(shè)計(jì)的“DES 破譯機(jī)”破譯了 DES 時(shí),DES 終于被清楚地證明是不安全的。Zzz6ZB2Ltk三、DES 算法加解密原理DES 算法由加密、子密鑰和解密的生成三部分組成。現(xiàn)將DES 算法介紹如下。加密DES 算法處理的數(shù)據(jù)對(duì)象是一組64 比特的明文串。設(shè)該明文串為m=m1m2m64(mi=0 或 1。明文串經(jīng)過(guò) 64 比特的密鑰 K 來(lái)加密,最后
8、生成長(zhǎng)度為 64 比特的密文 E。其加密過(guò)程圖示如下:dvzfvkwMI1坯過(guò)甘換JPLl-RD帆I(xiàn)RLRL5-LMR16-L15申LLBRRIS運(yùn)初試買換P-l_i, *,fA位岳丈數(shù)據(jù)輔出DES 算法加密過(guò)程對(duì) DES 算法加密過(guò)程圖示的說(shuō)明如下:待加密的 64 比特明文串 m,經(jīng)過(guò) IP 置換 初始置換)后,得到的比特串的下標(biāo)列表如下:4/ 17P58504234261810260524436282012462544638302214664564840322416857494133251791595143352719113615345372921135635547393123157該比特
9、串被分為 32 位的 L0 和 32 位的 R0 兩部分。R0 子密鑰 K1(子密鑰的生成將在后面講 經(jīng)過(guò)變換 f(R0,K1vf 變換將在下面講)輸出 32 位的比特串 f1,f1 與 L0 做不進(jìn)位的二進(jìn)制加法運(yùn)算。運(yùn)算規(guī)則為:rqyn14ZNXI10=01=1; 00-11=0;fl 與 L0 做不進(jìn)位的二進(jìn)制加法運(yùn)算后的結(jié)果賦給R1,R0 則原封不動(dòng)的賦給 L1。L1 與 R0 又做與以上完全相同的運(yùn)算,生成 L2 , R2一共經(jīng)過(guò) 16 次運(yùn)算。最后生成R16 和 L16。其中 R16 為 L15 與f(R15,K16做不進(jìn)位二進(jìn)制加法運(yùn)算的結(jié)果,L16 是 R15 的直接賦值。Em
10、xvxOtOcoR16 與 L16 合并成 64 位的比特串。值得注意的是R16 一定要排在 L16 前面。R16 與 L16 合并后成的比特串,經(jīng)過(guò)置換 IP-1終結(jié)置換)后所得比特串的下標(biāo)列表如下:SixE2yXPq54。8481656246432IP-1397471555236331386461454226230375451353216129364441252206028353-43115119592734242105018582633-141949175725經(jīng)過(guò)置換 IP-1 后生成的比特串就是密文e,變換 f(Ri-1,Ki:它 的 功 能 是 將3 2比 特 的 輸 入 再 轉(zhuǎn)
11、化 為3 2比 特 的 輸 岀 。 其 過(guò) 程 如 圖 所 示f 變換說(shuō)明: 輸入 Ri-1 (32 比特 經(jīng)過(guò)變換 E擴(kuò)展置換 E) 后, 膨脹為 48 比特。 膨脹后的比特串的下標(biāo)列 表如下:6ewMyirQFLE:32T234545678939101112131213141516171617181920215/ 1720212223242524252627282928293031321膨脹后的比特串分為 8 組,每組 6 比特。各組經(jīng)過(guò)各自的S 盒后,又變?yōu)?4 比特(具體過(guò)程見后 ,合并后又成為 32 比特。該 32 比特經(jīng)過(guò) P 變換壓縮置換 P)后,其下標(biāo)列表如下:kavU42VR
12、UsP:1672021291228171152326518311028241432273919133062211425經(jīng)過(guò) P 變換后輸出的比特串才是32 比特的 fRi-1,Ki)S 盒的變換過(guò)程:任取一 S 盒。見圖:在其輸入 b1,b2,b3,b4,b5,b6 中,計(jì)算出 x=b1*2+b6, y=b5+b4*2+b3*4+b2*8,再?gòu)?Si 表中查出 x 行,y 列的 值 Sxy。將Sxy 化為二進(jìn)制,即得 Si 盒的輸出。S 表如圖所示)y6v3ALoS896/0L321J141510L4413L21511S3106L25g g07LQ157434213L
13、10e12L3?3S2斗J48J62LI512973inin503 3152i2&9175113L4iaa a6130151S14d11A9丁21313no o510I-門&7 7514nClL0dJLI52Q7LI304L3L5s12693215313310L315斗2H712ID5149S30Id0rs-L斗63L55113L27H馬2Si1370934S Sto2S5|I4n11151 12 213649呂153 301J2U5101473I301309S S7415H31152112Sq0713143a691013S5H124ISLW3n3d15Ol孑472L21092LO690323
14、17L315131452 2S斗3 335Q630B3945LI1272L4D2n4L710ll6g3isna a149S5I1421111471J0ISIS03P P!d2百:1LI10137559L2563 3Q43LI31271H2 213百15Dgia斗S3Sd012110L592苗g013341475n.L101542?nP P5d1L340ti3s29】41552$L23704013196號(hào)斗3J12g515ID3114176D833S?0斗112H15dS S13312P P75ID61L13130II749ILO415312IS5d2L4!11L3n37L410156305P2
15、3 36】.1384LDLD7950152332013JS4ti151:llio93145D1271113133037 74n5a11014g227 71141912L4206103353 35S3211474101315np0j56n.以上是 DES 算法加密原理加密過(guò)程實(shí)現(xiàn)(JAVA 主要源代碼)輸入 64 位明文串,經(jīng)過(guò) IP 置換:for(i=0。i:首先進(jìn)行 S 盒的運(yùn)算。輸入 32 位比特串,經(jīng)過(guò) E 變換,由 32 位變?yōu)?48 位:for(i=0。i REi=048 位分成 8 組:i+i+7/ 17for(i=0oi8/ 17for(j=0。jS【ij=RE【(i*6+j。經(jīng)
16、過(guò) S 盒,得到 8 個(gè)數(shù):sBoxDatai+ (Si2 + (Si3+ Si4將 8 個(gè)數(shù)變換輸岀二進(jìn)制:for(j=sValue(i *4+sBoxDatai=sQsAEJkW5T經(jīng)過(guò) P 變換:RPi = sValuePi - 1。至此,S 盒運(yùn)算完成左右交換:L1i = R0i。R1i = L0i + RPi。Ri 為 Li-1 與 f(R,K進(jìn)行不進(jìn)位二進(jìn)制加法運(yùn)算結(jié)果:R1i = L0i + RPi。if (R1i = 2 R1i=0各次迭代類似,可以依此類推。2、子密鑰的生成 64 比特的密鑰生成 16 個(gè) 48 比特的子密鑰。其生成過(guò)程見圖:+Si5(Si1sBoxDatai
17、%2/ 23- jsBoxDataiS_Boxi(Si09/ 1721|1328|2012該比特串分為長(zhǎng)度相等的比特串 CO 和 DO。 然后 CO 和 DO 分別循環(huán)左移 1 位, 得到 C1 和 D1。 C1 和 D1 合并起來(lái)生成 C1D1oC1D1 經(jīng)過(guò) PC-2v 置換 B)變換后即生成4 8 比 特 的K 1 。 K 1 的 下 標(biāo) 列 表 為 :GMslasNXkAPC-21417112415328156211023191242681672720132415231374755304051453348444939563453464250362932C1、D1 分別循環(huán)左移 LS2
18、位,再合并,經(jīng)過(guò) PC-2,生成子密鑰 K2依次類推直至生成子密鑰K16注意:Lsi(l =1,2,.16的數(shù)值是不同的。具體見下表:TlrRGchYzg迭代順序12345678910111213141516左移位數(shù)1122222212222221子密鑰的生成 vJAVA 源代碼):輸入 64 位 K,經(jīng)過(guò) PC-1 變?yōu)?56 位:for(i=0oiK0i = keyPC_1i - 1。7EqZcWLZNX56 位的 K0,均分為 28 位的 C0,D0。C0,D0 生成 K1 和 C1,D1 for (i = 0oi / 循環(huán)左移一位c1i = c0i + 1od1i = d0i + 1o
19、c127 = c00od127 = d00o else if (offset = 2 for (i = 0oi / 循環(huán)左移兩位c1i = c0i + 2od1i = d0i + 2oc126 = c00od126 = d00oc127 = c01oPC-157494133251791585042342618102595143352719113605244366355473931231576254463830221466153453729子密鑰生成過(guò)程具體解釋如下:64 比特的密鑰 K,經(jīng)過(guò) PC-1v 置換 A)后,生成 56 比特的串。其下標(biāo)如表所示:10/ 17d127 = d01ofo
20、r (i = 0oi ki = c1io生成子密鑰 kiki + 28 = d1io注意:生成的子密鑰不同,所需循環(huán)左移的位數(shù)也不同。在編程中,生成不同的子密鑰應(yīng)以上述offset 表為準(zhǔn)。zvpgeqJ1hk3解密DES 的解密過(guò)程和 DES 的加密過(guò)程完全類似,只不過(guò)將 16 圈的子密鑰序列 K1 , K2K16 的順序倒過(guò) 來(lái)。即第一圈用第16個(gè)子密鑰K16,第二圈用K15,其余類推。NrpoJac3v1第一圈:L=R15, R=L15 f(R15,K16 f(R15,K16=L15 同理 R15=L14 f(R14,K15, L15=R14。同理類推:得 L=R0, R=L0。其程序源
21、代碼與加密相同。四、加解密算法的實(shí)現(xiàn)1 軟件版本:jdk1.6.0, JCreator Pro V3.5.013 漢化版2 平臺(tái):Windows XP3 源代碼:public class DesUtil byte bytekey。public DesUtil(String strKey this.bytekey = strKey.getBytes(。11/ 17/聲明常量字節(jié)數(shù)組private static final int IP = 58, 50, 42, 34, 26, 18, 10, 2, 60, 52,1nowfTG4KI44, 36, 28, 20, 12, 4, 62, 54,
22、46, 38, 30, 22, 14, 6, 64, 56, 48,fjnFLDa5Zo40, 32, 24, 16, 8, 57, 49, 41,33, 25, 17, 9, 1,59, 51,43, 35,tfnNhnE6e527, 19, 11,3, 61,53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31,HbmVN777sL23, 15, 7 。/ 64private static final int IP_1 = 40, 8, 48, 16, 56, 24, 64, 32, 39, 7,V7l4jRB8Hs47, 15, 55, 23, 63
23、, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45,83lcPA59W913, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11,mZkklkzaaP51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49,AVktR43bpw17, 57, 25 。 / 64private static final int PC_1 = 57, 49, 41, 33, 25, 17, 9, 1, 58, 50,ORjBnOwc
24、Ed42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44,2MiJTy0dTT36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6,gIiSpiue7A61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4 。 / 56uEh0U1Yfmhprivate static final int PC_2 = 14, 17, 11, 24, 1, 5, 3, 28, 15,6, 21,IAg9qLsgBX10, 23,
25、 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47,WwghWvVhPE55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36,asfpsfpi4k29, 32 。 / 48private static final int E = 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9,ooeyYZTjj110, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, 20,
26、 21, 20,BkeGuInkxI21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1 。 / 48PgdO0sRlMoprivate static final int P = 16, 7, 20, 21,29, 12, 28, 17, 1, 15, 23,3cdXwckm1526, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22,h8c52WOngM11, 4, 25 。 / 32private static final int S_Box
27、 = /S- 盒/ S_Box1 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 ,v4bdyGious 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8 ,J0bm4qMpJ9 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0 ,XVauA9grYP 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 ,bR9C6TJscw / S_Box2 15, 1, 8, 14,
28、6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10 ,pN9LBDdtrd 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5 ,DJ8T7nHuGT 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15 ,QF81D7bvUA 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 ,4B7a9QFw9h / S_Box3 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11,
29、4, 2, 8 ,ix6iFA8xoX 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1 ,wt6qbkCyDE 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7 ,Kp5zH46zRk 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 ,Yl4HdOAA61 / S_Box4 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15 ,ch4PJx4BlI 13, 8, 11,
30、5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9 ,qd3YfhxCzo 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4 ,E836L11DO512/ 17 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 ,S42ehLvE3M / S_Box5 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9 ,501nNvZFis 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15
31、, 10, 3, 9, 8, 6 ,jW1viftGw9 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14 ,xS0DOYWHLP 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 ,LOZMkIqI0w / S_Box6 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11 ,ZKZUQsUJed 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8 ,dGY2mcoKtT 9,
32、 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6 ,rCYbSWRLIA 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 ,FyXjoFlMWh / S_Box7 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 ,TuWrUpPObX 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6 ,7qWAq9jPqE 1, 4, 11, 13, 12, 3, 7, 14, 10, 1
33、5, 6, 8, 0, 5, 9, 2 ,llVIWTNQFk 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 ,yhUQsDgRT1 / S_Box8 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7 ,MdUZYnKS8I 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2 ,09T7t6eTno 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8 ,e5TfZQIUB5
34、 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 s1SovAcVQM。private static final int LeftMove = 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2,2, 2, 2, 1 。GXRw1kFW5s/ 左移位置列表private byte UnitDes(byte des_key, byte des_data, int flag UTREx49Xj9/ 檢測(cè)輸入?yún)?shù)格式是否正確,錯(cuò)誤直接返回空值 | (des_data.length != 8| (flag != 1 & (fl
35、ag != 0 8PQN3NDYyPthrow new RuntimeException(Data Format Error ! 。int flags = flag 。 / 二進(jìn)制加密密鑰int keydata = new int64 。 / 二進(jìn)制加密數(shù)據(jù)int encryptdata = new int64 。 / 加密操作完成后的字節(jié)數(shù)組byte EncryptCode = new byte8 。 / 密鑰初試化成二維數(shù)組int KeyArray = new int1648 。 / 將密鑰字節(jié)數(shù)組轉(zhuǎn)換成二進(jìn)制字節(jié)數(shù)組mLPVzx7ZNwkeydata = ReadDataToBirnar
36、yIntArray(des_key 。 / 將 加 密 數(shù) 據(jù) 字 節(jié) 數(shù) 組 轉(zhuǎn) 換 成 二 進(jìn) 制 字 節(jié) 數(shù) 組AHP35hB02dencryptdata = ReadDataToBirnaryIntArray(des_data 。 / 初試化密鑰為二維密鑰數(shù)組NDOcB141gTKeyInitialize(keydata,KeyArray 。 / 執(zhí)行加密解密操作EncryptCode = Encrypt(encryptdata, flags, KeyArray 。1zOk7Ly2vAreturn EncryptCode 。/ 初試化密鑰數(shù)組private void KeyInitia
37、lize(int key, int keyarray fuNsDv23Khint i 。int j 。13/ 17int K0 = new int56 。 / 特別注意: xxxIPi-1 等類似變換for (i = 0 。 i K0i = keyPC_1i - 1 。 / 密鑰進(jìn)行 PC-1 變換for (i = 0 。 i LeftBitMove(K0, LeftMovei 。 / 特別注意: xxxIPi-1 等類似變換tqMB9ew4YXfor (j = 0 。 j keyarrayij = K0PC_2j - 1 。 / 生成子密鑰 keyarrayijHmMJFY05dE / 執(zhí)行
38、加密解密操作private byte Encrypt(int timeData, int flag, int keyarray ViLRaIt6skint i 。byte encrypt = new byte8 。int flags = flag 。int M = new int64 。int MIP_1 = new int64 。/ 特別注意: xxxIPi-1 等類似變換for (i = 0 。 i Mi = timeDataIPi - 1 。 / 明文 IP 變換if (flags = 1 / 加密for (i = 0 。 i LoopF(M, i, flags, keyarray 。
39、else if (flags = 0 / 解密for (i = 15 。 i -1 。 i- LoopF(M, i, flags, keyarray 。for (i = 0 。 i MIP_1i = MIP_1i - 1 。 / 進(jìn)行 IP-1 運(yùn)算GetEncryptResultOfByteArray(MIP_1, encrypt 。 / 返回加密數(shù)據(jù)9eK0GsX7H1return encrypt 。private int ReadDataToBirnaryIntArray(byte intdata naK8ccr8VIint i 。int j 。/ 將數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制數(shù),存儲(chǔ)到數(shù)組int
40、 IntDa = new int8 。for (i = 0 。 i IntDai = intdatai 。if (IntDai 14/ 17IntDai += 256 。IntDai %= 256 。int IntVa = new int64 。for (i = 0 。 i for (j = 0 。 j IntVa(i * 8 + 7 - j = IntDai % 2 。IntDai = IntDai / 2 。return IntVa 。private void LeftBitMove(int k, int offset int i 。/ 循環(huán)移位操作函數(shù)int c0 = new int28
41、 。int d0 = new int28 。int c1 = new int28 。int d1 = new int28 。for (i = 0 。 i c0i = ki 。d0i = ki + 28 。if (offset = 1 for (i = 0 。 i / 循環(huán)左移一位 c1i = c0i + 1 。d1i = d0i + 1 。c127 = c00 。d127 = d00 。 else if (offset = 2 for (i = 0 。 i / 循環(huán)左移兩位 c1i = c0i + 2 。d1i = d0i + 2 。c126 = c00 。d126 = d00 。c127 =
42、 c01 。d127 = d01 。for (i = 0 。 i ki = c1i 。15/ 17ki + 28 = d1i 。private void LoopF(int M, int times, int flag, int keyarray int i 。int j 。int L0 = new int32 。B6JgIVV9ao16/ 17int R0 = new int32 。int L1 = new int32 。int R1 = new int32 。int RE = new int48 。 int S = new int86 。int sBoxData = new int8 。i
43、nt sValue = new int32 。int RP = new int32 。for (i = 0 。 i L0i = Mi 。 / 明文左側(cè)的初始化R0i = Mi + 32 。 / 明文右側(cè)的初始化for (i = 0 。 i REi = R0Ei - 1 。 / 經(jīng)過(guò) E 變換擴(kuò)充,由 32 位變?yōu)?48 位REi = REi + keyarraytimesi 。 / 與 KeyArraytimesi 按位作不進(jìn)位加法運(yùn)算 if (REi= 2 REi = 0 。for (i = 0 。 i / 48 位分成 8 組for (j = 0 。 j Sij = RE(i * 6 +
44、j 。/下面經(jīng)過(guò) S 盒,得到 8 個(gè)數(shù)sBoxDatai = S_Boxi(Si0 + Si5(Si1 3YIxKpScDM+ (Si2 + (Si3 + Si4。/ 8 個(gè)數(shù)變換輸出二進(jìn)制for (j = 0 。 j sValue(i * 4 + 3 - j = sBoxDatai % 2 。sBoxDatai = sBoxDatai / 2 。for (i = 0 。 i RPi = sValuePi - 1。/ 經(jīng)過(guò) P 變換L1i = R0i 。 / 右邊移到左邊R1i = L0i + RPi 。if (R1i = 2 R1i = 0 。/ 重新合成 M ,返回?cái)?shù)組 M/ 最后一次變
45、換時(shí),左右不進(jìn)行互換。此處采用兩次變換實(shí)現(xiàn)不變P2IpeFpap517/ 17if (flag = 0 & (times = 0 | (flag = 1 & (times = 15 gUHFg9mdSsMi = R1i 。Mi + 32 = L1i 。18/ 17 else Mi = L1i 。Mi + 32 = R1i 。private void GetEncryptResultOfByteArray(int data, byte value inti 。int j 。 / 將存儲(chǔ) 64 位二進(jìn)制數(shù)據(jù)的數(shù)組中的數(shù)據(jù)轉(zhuǎn)換為八個(gè)整數(shù) for (i =0 。 i for (j = 0 。 j va
46、luei += (data(i + j 。 for (i = 0 。 i valuei %= 256 。 if (valuei 128 valuei -= 255 。private byte ByteDataFormat(byte data, int flag IMGWiDkflPint len = data.length 。int padlen = 8 - (len % 8 。 int newlen = len + padlen 。 byte newdata = new bytenewlen 。System.arraycopy(data, 0, newdata, 0, len。 for (i
47、nt i = len 。 i newdatai = (byte padlen 。 returnnewdata 。public byte DesEncrypt(byte des_data, int flag WHF4OmOgAwbyte format_key = ByteDataFormat(bytekey, flag 。byte format_data = ByteDataFormat(des_data, flag 。aDFdk6hhPdint datalen = format_data.length 。int unitcount = datalen / 8 。 byte result_data = new bytedatalen 。for (int i = 0 。 i byte tmpkey = new byte8 。byte tmpdata = new byte8 。System.arraycopy(format_key, 0, tmpkey, 0, 8 。 System.arraycopy(format_data, i * 8, tmpdata, 0, 8 。ozElQQLi4Tbytetmpresult = UnitDes(tmpkey, tmpdata, flag 。System.arraycopy(tmpresult, 0, result_data,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年 二手房產(chǎn)買賣合同
- 2025年4個(gè)兄弟分家協(xié)議書模板
- 三年級(jí)上冊(cè)數(shù)學(xué)教案-8.1 分?jǐn)?shù)的初步認(rèn)識(shí) ︳西師大版
- 2025年固始縣再就業(yè)小額擔(dān)保貸款協(xié)議
- 2025年廣東理工職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及答案一套
- 2025年河南機(jī)電職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)必考題
- 2025云南省建筑安全員-C證考試題庫(kù)
- 健身中心鏈家居間服務(wù)合同
- 2025年度中小企業(yè)擔(dān)保合同解除協(xié)議書
- 2025年度文化創(chuàng)意產(chǎn)品采購(gòu)合同甲方責(zé)任與市場(chǎng)推廣
- 質(zhì)量管理小組活動(dòng)準(zhǔn)則TCAQ10201-2020
- 扶梯人行道檢驗(yàn)驗(yàn)收作業(yè)指導(dǎo)書
- GB/T 41855-2022小型游樂(lè)設(shè)施轉(zhuǎn)椅
- 2023年蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ))試題庫(kù)含答案解析
- GB/T 20308-2020產(chǎn)品幾何技術(shù)規(guī)范(GPS)矩陣模型
- 男孩女孩動(dòng)起來(lái)健康運(yùn)動(dòng)知識(shí)PPT模板
- 鐵路道岔知識(shí)課件
- 自考公共關(guān)系學(xué)課件
- 森林害蟲防治方法課件
- 各種el34名膽電子管評(píng)測(cè)
- 超分子化學(xué)-杯芳烴課件
評(píng)論
0/150
提交評(píng)論