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