idea
IDEA 全稱IntelliJ IDEA,是java語(yǔ)言開(kāi)發(fā)的集成環(huán)境,IntelliJ在業(yè)界被公認(rèn)為最好的java開(kāi)發(fā)工具之一,尤其在智能代碼助手、代碼自動(dòng)提示、重構(gòu)、J2EE支持、Ant、JUnit、CVS整合、代碼審查、 創(chuàng)新的GUI設(shè)計(jì)等方面的功能可以說(shuō)是超常的。IDEA是JetBrains公司的產(chǎn)品,這家公司總部位于捷克共和國(guó)的首都布拉格,開(kāi)發(fā)人員以嚴(yán)謹(jǐn)著稱的東歐程序員為主。
IDEA加密算法簡(jiǎn)介
1、IDEA加密算法概述
IDEA加密算法是一個(gè)分組長(zhǎng)度為64比特的分組密碼算法,密鑰長(zhǎng)度為128比特,由8輪迭代操作實(shí)現(xiàn)。每個(gè)迭代都由三種函數(shù):mod(216)加法、mod(216+1)乘法和逐位異或算法組成。整個(gè)算法包括子密鑰產(chǎn)生、數(shù)據(jù)加密過(guò)程、數(shù)據(jù)解密過(guò)程三部分。該加密算法規(guī)定明文和密文塊均為64比特,密鑰長(zhǎng)度為128比特,加解密相同,只是密鑰各異。
(1)IDEA加密算法的加密過(guò)程
IDEA總共進(jìn)行8輪迭代操作,每輪需要6個(gè)子密鑰,另外還需要4個(gè)額外子密鑰輸出變換,所以總共需要52個(gè)子密鑰,這52個(gè)子密鑰都是從128比特密鑰中擴(kuò)展出來(lái)的。
輸入的明文為8個(gè)字符(即64比特),將64比特?cái)?shù)據(jù)塊分成X1,X2,X3,X4四個(gè)子塊,每一子塊16比特。這4個(gè)子塊將作為第一輪迭代的輸入,全部共8輪迭代。在每一輪中,這4個(gè)子塊相互異或、相加和相乘,且與6個(gè)16比特子密鑰相異或、相加和相乘。最后在輸出變換中4個(gè)子塊與4個(gè)子密鑰進(jìn)行運(yùn)算。加密過(guò)程如圖1所示。
1、加密密鑰擴(kuò)展算法的實(shí)現(xiàn)
在IDEA加密算法中,實(shí)際上是將128比特密鑰擴(kuò)展為832比特。每一個(gè)字節(jié)用0補(bǔ)足16位。具體是如何擴(kuò)展的呢?在前面的擴(kuò)展思想中已經(jīng)知道密鑰串分8個(gè)子塊,循環(huán)左移7次,其中第7次循環(huán)是取前4個(gè),所以最終形成832比特(16*8*6+16*4)。擴(kuò)展密鑰數(shù)組為m_nKeyEncryptBox[52],部分代碼如下:
byte[]asciiBytes=Encoding.Convert(unicode,ascii,unicode.GetBytes(this.m_sEncryptionKey));
//將一組字符編碼成一個(gè)字節(jié)序列
char[]asciiChars=newchar[ascii.GetCharCount(asciiBytes,0,asciiBytes.Length)];
//進(jìn)行字節(jié)到字符再到串的轉(zhuǎn)換
ascii.GetChars(asciiBytes,0,asciiBytes.Length,asciiChars,0);
//由密鑰m_sEncryptionKey擴(kuò)展成加密密鑰擴(kuò)展數(shù)組m_nKeyEncryptBox
for(j=0;j《8;j++)//加密子密鑰[j]循環(huán)左移8+[j+1]位
加密算法
是旅居瑞士中國(guó)青年學(xué)者來(lái)學(xué)嘉和著名密碼專家J.Massey于1990年提出的。它在1990年正式公布并在以后得到增強(qiáng)。這種算法是在DES算法的基礎(chǔ)上發(fā)展出來(lái)的,類似于三重DES,和DES一樣IDEA也是屬于對(duì)稱密鑰算法。發(fā)展IDEA也是因?yàn)楦械紻ES具有密鑰太短等缺點(diǎn),已經(jīng)過(guò)時(shí)。IDEA的密鑰為128位,這么長(zhǎng)的密鑰在今后若干年內(nèi)應(yīng)該是安全的。
idea
類似于DES,IDEA算法也是一種數(shù)據(jù)塊加密算法,它設(shè)計(jì)了一系列加密輪次,每輪加密都使用從完整的加密密鑰中生成的一個(gè)子密鑰。與DES的不同處在于,它采用軟件實(shí)現(xiàn)和采用硬件實(shí)現(xiàn)同樣快速。
由于IDEA是在美國(guó)之外提出并發(fā)展起來(lái)的,避開(kāi)了美國(guó)法律上對(duì)加密技術(shù)的諸多限制,因此,有關(guān)IDEA算法和實(shí)現(xiàn)技術(shù)的書籍都可以自由出版和交流,可極大地促進(jìn)IDEA的發(fā)展和完善
idea
IDEA曾今也是AES算法標(biāo)準(zhǔn)的主要競(jìng)爭(zhēng)者,其安全性已經(jīng)在國(guó)際密碼年會(huì)上被證明。
在PGP(pretty good privacy)中,IDEA算法被采用。
64-位數(shù)據(jù)分組被分成4個(gè)16-位子分組:xl,X2,x3,x4。這4個(gè)子分組成為算法的第一輪的輸入,總共有8輪。在每一輪中,這4個(gè)子分組相列相異或,相加,相乘,且與6個(gè)16-位子密鑰相異或,相加,相乘。在輪與輪間,第二和第:個(gè)子分組交換。最后在輸出變換中4個(gè)子分組與4個(gè)子密鑰進(jìn)行運(yùn)算。
在每一輪中,執(zhí)行的順序如下:(以下表述中的相加指的是兩個(gè)數(shù)mod 2^256 相加,例如:(a + b) mod p,其結(jié)果是a+b算術(shù)和除以p的余數(shù),也就是說(shuō),(a+b) = kp +r,則 (a+b) mod p =r,又例如對(duì)于下列表述中的“(2)X2和第二個(gè)子密鑰相加”就是指用X2與第二個(gè)子密鑰的和除以2^16(即65536)后的余數(shù)。對(duì)于以下表述中的相乘,指的是:(a × b) mod p,其結(jié)果是 a × b算術(shù)乘法除以p的余數(shù),又例如對(duì)于下列表述中的“(1)X1和第一個(gè)子密鑰相乘。”就是指用X1和第一個(gè)子密鑰相乘后的積除于(2^16+1)(即65537)后的余數(shù)。異或指的是不進(jìn)位加法。)
(1)X1和第一個(gè)子密鑰相乘。
(2)X2和第二個(gè)子密鑰相加。
(3)X3和第三個(gè)子密鑰相加。
(4)X4和第四個(gè)子密鑰相乘。
(5)將第(1)步和第(3)步的結(jié)果相異或。·
(6)將第(2)步和第(4)步的結(jié)果相異或。
(7)將第(5)步的結(jié)果與第五個(gè)子密鑰相乘。
(8)將第(6)步和第(7)步的結(jié)果相加。
(9)將第(8)步的結(jié)果與第六個(gè)子密鑰相乘。
(10)將第(7)步和第(9)步的結(jié)果相加。
(11)將第(1)步和第(9)步的結(jié)果相異或。
(12)將第(3)步和第(9)步的結(jié)果相異或。
(13)將第(2)步和第(10)步的結(jié)果相異或。
(14)將第(4)步和第(10)步的結(jié)果相異或。
每一輪的輸出是第(11)、(12)、(13)和(14) 步的結(jié)果形成的4個(gè)子分組。將中間兩個(gè)分組分組交換(最后一輪除外)后,即為下一輪的輸入。
經(jīng)過(guò)8輪運(yùn)算之后,有一個(gè)最終的輸出變換:
(1) X1和第一個(gè)子密鑰相乘。
(2) X2和第二個(gè)子密鑰相加。
(3) X3和第三個(gè)子密鑰相加。
(4) X4和第四個(gè)子密鑰相乘。
最后,這4個(gè)子分組重新連接到一起產(chǎn)生密文。
產(chǎn)生子密鑰也很容易。這個(gè)算法用了52個(gè)子密鑰(8輪中的每一輪需要6個(gè),其他4個(gè)用與輸出變換)。首先,將128-位密鑰分成8個(gè)16-位子密鑰。這些是算法的第一批8個(gè)子密鑰(第一輪六個(gè),第二輪的頭兩個(gè))。然后,密鑰向左環(huán)移25位后再分成8個(gè)子密鑰。開(kāi)始4個(gè)用在第二輪,后面4個(gè)用在第三輪。密鑰再次向左環(huán)移25位產(chǎn)生另外8個(gè)子密鑰,如此進(jìn)行D算法結(jié)束。
解密過(guò)程基本上一樣,只是子密鑰需要求逆且有些微小差別,解密子密鑰要么是加密子密鑰的加法逆要么是乘法逆。(對(duì)IDEA而言,對(duì)于模256十1乘,全0子分組用256=-l來(lái)表示,因此0的乘法逆是0)。計(jì)算子密鑰要花點(diǎn)時(shí)間,但對(duì)每一個(gè)解密密鑰,只需做一次。
關(guān)于IDEA中運(yùn)用的很多概念,需要參考數(shù)論中的知識(shí),如有疑問(wèn),可以參考以下資料:計(jì)算機(jī)密碼學(xué)(盧開(kāi)澄著清華大學(xué)出版社出版),計(jì)算機(jī)密碼學(xué)及其應(yīng)用,初等數(shù)論,數(shù)論導(dǎo)引(華羅庚著)等。關(guān)于IDEA運(yùn)用的數(shù)學(xué)原理,均可在以上資料中獲得答案。
評(píng)論