【正文】
31 附 錄 加密算法具體分析 功能分析 本軟件 幾乎可以對任何格式的文件進(jìn)行加密:文本文件 (.txt)、 WORD 文檔(.doc, rtf)、圖像文件 (jpg, bmp, )、 視頻 文件 (.rmvb)等等。 cryptology。 Another aspect, inter give a lot of business to have brought along boundless business machine, Inter has joined the whole world together, make for Inter has implied make for world, this is good deed dream of, especially with regard to small and medium enterprise beyond doubt to uncounted business homes. For of resolving this pair of contradiction, leading to the world for being able to fire this greatly on safe basis, we are forced to have chosen the data encrypt and encrypt technology figure signature because of. The effect encrypting on the work is to prevent useful or privatization information from being intercepted and being stolen on the work. Transfer a simple example is being password, the puter password is most important, that a lot of safety protects system is the passwordbased, the password disclosing es up to grow significance in some saying the total collapse implying whose security system. The scheme resolving the abovementioned difficult problem39。其二, 可能在加密某個文件時,明文輸出會 出錯 。信息在瞬息萬變,因此對于加密性的要求是很強的,上面我給出的算法的安全性和擴展性很好,它不僅僅對普通的文件加密。 } 算法結(jié)果 啟動軟件 26 圖 1 選擇要加密的文件 圖 2 打開后顯示 都是亂碼 27 圖 3 7 總結(jié) 經(jīng)過好幾個月的努力,有了小小的成就。 } } p=pnext。 pten[DeKey[i]][j]==39。j++) { for(i=0。 if(!out_file) 25 { return FALSE。 for(i=0。 DeQueue()。iN。 新建一個文本文件 文件新建是否成功 返回 FALSE N P 指向結(jié)構(gòu)體的首元素 Y 關(guān)閉文本 文件 返回 TRUE 結(jié)束 P 是否為空 Y N 以密碼為縱坐標(biāo),縱向?qū)?dāng)前元素中的值保存到文件中 P 指向下一個元素 24 } p=front。 明文 Please transfer one million dollars to my Swiss Bank account six two two ? 密文 AFLLSKSOSELAWAIATOOSSCTCLNMOMANTESILYN TWRNNTSOWDPAEDOBUO ?M E G A B U C K 7 4 5 1 2 8 3 6 P l e a s e t r a n s f e r o n e m i l l i o n d o l l a r s t o m y S w i s s B a n k a c c o u n t s i x t w o t w o a b c d 23 加密算法 BOOL Encrypt_Decrypt::Encrypt(CString file) { Str *p。在密鑰中的字符不允許重復(fù),明文按密鑰來排序。如果不了解這一點,把密鑰 Key 的 8, 16, 24, ..... .64 位作為有效數(shù)據(jù)使用,將不能保證 DES 加密數(shù)據(jù)的安全性,對運用 DES 來達(dá)到保密作用的系統(tǒng)產(chǎn)生數(shù)據(jù)被破譯的危險,這正是 DES 算法在應(yīng)用上的誤區(qū),留下了被人攻擊、被人破譯的極大隱患。 21 DES算法的應(yīng)用誤區(qū) DES算法具有極高安全性,到目前為止,除了用窮舉搜索法對 DES 算法進(jìn)行攻擊外,還沒有發(fā)現(xiàn)更有效的辦法。 DES 算法的解密過程是一樣的,區(qū)別僅僅在于第一次迭代時用子密鑰 K15,第二次 K1 ......,最后一次用 K0,算法本身并沒有任何變化。 從子密鑰 Ki 的生成算法描述圖中我們可以看到:初始 Key值為 64位,但 DES 算法規(guī)定,其中第 1 ......64 位是奇偶校驗位,不參與 DES 運算。逆置換正好是初始置的逆運算,例如,第 1 位經(jīng)過初始置換后,處于第 40位,而通過逆置換,又將第 40 位換回到第 1位,其逆置換規(guī)則如下表所示: 40 8 48 16 56 24 64 32 38 6 46 14 54 22 62 30 36 4 44 12 52 20 60 28 34 2 42 10 50 18 58 26 39 7 47 15 55 23 63 31 37 5 45 13 53 21 61 29 35 3 43 11 51 19 59 27 33 1 41 9 49 17 57 25 放大換位表 : 32 1 2 3 4 5 6 12 13 12 13 14 15 16 22 23 24 25 26 27 28 34 2 42 10 50 18 58 7 8 9 8 9 10 11 17 18 19 20 21 20 21 29 28 29 30 31 32 1 26 33 1 41 9 49 17 單純換位表 : 16 7 20 21 29 12 28 17 2 8 24 14 32 27 3 9 1 15 23 26 5 18 31 10 19 13 30 6 22 11 4 25 在 f(Ri,Ki)算法描述圖中, S1,S2...S8 為選擇函數(shù),其功能是把 6bit 數(shù)據(jù)變?yōu)?4bit數(shù)據(jù)。 DES算法詳述 DES 算法把 64 位的明文輸入塊變?yōu)?64 位的密文輸出塊,它所使用的密鑰也是 64 位,整個算法如下: 其功能是把輸入的 64位數(shù)據(jù)塊按位重新組合,并把輸出分為 L0、 R0兩部分,每部分各長 32 位,其置換規(guī)則見下表: 58 50 42 34 26 18 10 2 62 54 46 68 60 22 14 6 57 49 41 33 25 17 9 1 61 53 45 37 29 21 13 5 60 52 44 36 28 20 12 4 64 56 48 40 32 24 16 8 59 51 43 35 27 19 11 3 63 55 47 39 31 23 15 7 18 即將輸入的第 58 位換到第一位,第 50位換到第 2 位, ...,依此類推,最后一位是原來的第 7位。 DES 算法是這樣工作的:如 Mode 為加密,則用 Key 去 把數(shù)據(jù) Data 進(jìn)行加密,生成Data 的密碼形式( 64 位)作為 DES的輸出結(jié)果;如 Mode 為解密,則用 Key 去把密碼形式的數(shù)據(jù) Data 解密,還原為 Data 的明碼形式( 64 位)作為 DES 的輸出結(jié)果。 5 另一類算法―― DES 算法 17 1977 年 1 月,美國政府頒布:采納 IBM 公司設(shè)計的方案作為非機密數(shù)據(jù)的正式數(shù)據(jù)加密標(biāo)準(zhǔn)( DES 棗 Data Encryption Standard)。 通過工具,我們獲得 1024 位的 N及 D E 來測試一下: n=0x328C74784DF31119C526D18098EBEBB943B0032B599CEE13CC2BCE7B5FCD15F90B66EC3A 85F5005DBDCDED9BDFCB3C4C265AF164AD55884D8278F791C7A6BFDAD55EDBC4F017F9CCF1 538D4C2020433B383B47D80EC74B51276CA05B5D6346B9EE5AD2D7BE7ABFB36E37108DD60438941D2ED173CCA50E114705D7E2BC511951 d=0x10001 e=0xE760A3804ACDE1E8E3D7DC0197F9CEF6282EF552E8CEBBB7434B01CB19A9D87A3106DD28 C523C29954C5D86B36E943080E4919CA8CE08718C3B0930867A98F635EB9EA9200B25906D91B80A47B77324E66AFF2C4D70D8B1C69C50A9D8B4B7A3C9EE05FFF3A16AFC023731D80634763DA1DCABE9861A4789BD782A592D2B1965 設(shè)原始信息 M=0x11111111111122222222222233333333333 完成這么大數(shù)字的計算依賴于大數(shù)運算庫,用 perl 來運算非常簡單: A) 用 d 對 M 進(jìn)行加密如下: c=M**d%n : C:\Tempperl Mbigint e $x=Math::BigIntbmodpow( 0x11111111111122222222222233333333333,0x10001,0x328C74784DF31119C526D18098EBEBB943B0032B599CEE13CC2BCE7B5FCD15F90B66EC3A85F5005DBDCDED9BDFCB3C4C265AF164AD55884D8278F791C7A6BFDAD55EDBC4F017F9CCF1538D4C2020433B383B47D80EC74B51276CA05B5D6346B9EE5AD2D7BE7ABFB36E37108DD60438941D2ED173CCA50E114705D7E2BC511951)。 print 加密串: ,$$r_cmess,\n。 } my $mess=RSA 娃哈哈哈~~~ 。 $Cbmodpow($E,$N)。$i+=3) { $c=substr($$r_mess,$i,3)。 } sub RSA_DECRYPT 14 { my $r_mess = shift _。 $Cbmodpow($D,$N)。$i length($$r_mess)。 print N=$N D=$D E=$E\n。 my %RSA_CORE = (n=2773,e=63,d=847)。 3) 解密: 我們可以用 e 來 對加密后的 c進(jìn)行解密,還原 M, m=c**e%n=465**63%2773; 13 即 m= 244, 用 e對 c解密后獲得 m=244 , 該值和原始信息 M相等。但這樣作是不安全的,對付辦法就是 e 和 d 都取較大的值。 因為 e1 和 e2 互質(zhì),故用 Euclidean 算法 能找到 r 和 s,滿足: r * e1 + s * e2 = 1 假設(shè) r 為負(fù)數(shù),需再用 Euclidean 算法計算 C1^(1),則 ( C1^(1) )^(r) * C2^s = P mod n 另外,還有其它幾種利用公共模數(shù)攻擊的方法。在中提到了幾種不同類型的攻擊方法。一般攻擊者是將某一信息作一下偽裝 (Blind),讓擁有私鑰的實體簽署。 RSA的速度 由于進(jìn)行的都是大數(shù)計算,使得 RSA 最快的情況也比 DES 慢上 100 倍,無論是軟件還是硬件實現(xiàn)。目前, RSA 的一些 變種算法已被證明等價于大數(shù)分解。對應(yīng)的密文是: ci = mi^e ( mod n ) ( a ) 解密時作如下計算: mi = ci^d ( mod n ) ( b ) RSA 可用于數(shù)字簽名,方案是用 (a)式簽名 , (b)式驗證。最后,利用 Euclid 算法計算解密密鑰 d, 滿足 e * d = 1 ( mod