熱門搜索:技工學校(907)  電子(873)  招生(678)  簡章(475)  學校(470)  電腦(373)
您當前位置:湖南電子職業中專學校文章頻道網絡工程技術

當前各種加密方案完全解析

時間:2010-07-15 22:36:39    整理:佚名    []
http://www.410014.com
    加密方法當前多種多樣,已經不可能找出一種分類方法來把各種加密方案很好地區分開來;旧蟻碚f可以分為依賴特定硬件的加密方案和不依賴硬件的加密方案。

  一、依賴硬件的加密方案

  1. 軟盤加密

  這是在計算機上 為古老的一種加密方案,它的原理是在軟盤的特殊位置寫入一些信息,軟件在運行時要檢驗這些信息。這種軟盤就好像一把鑰匙。軟件開發商只需一次投資購買一套加密工具就可以自己制作多張鑰匙盤。此方法加密簡單,成本低,在軟件發展的不同時期都能看到其閃光點。但因為軟驅是慢速設備,多次檢查軟盤上的加密點會大大拖慢程序的運行速度,所以一般加密軟件只在軟件運行開始的時候檢查一次,這樣不能避免用戶用一張加密盤啟動多份軟件。而且由于軟盤是一種易損載體,加密軟件對軟盤加密點的反復讀寫很容易造成軟盤的損壞。而這張加密盤又不能備份,軟件公司要不斷應付用戶更換加密盤的請求。另外由于這種加密技術出現得較早,硬解密的技術相對比較成熟,像雙星公司的King-Copy軟件能拷貝大多數的加密軟盤,連加密點一起復制,復制后的軟盤還是加密的。

  2. 卡加密

  在90年代初,各種各樣的漢卡涌現出來,隨之而來的卡加密技術也風行一時。由于種種問題,這種加密技術現在已經難得一見了。

  3. 軟件鎖加密

  軟件鎖加密是在國外首先出現的,它是一個插在計算機打印口上火柴盒大小的設備,國內俗稱“加密狗”。在加密鎖內部存有一定的數據和算法,計算機可以與之通訊來獲得其中的數據,或通過加密鎖進行某種計算。軟件無法離開加密鎖而運行。由于它不像卡加密那樣需要打開計算機的機箱來安裝,但又像加密卡那樣可以隨時訪問,而且訪問速度很快,所以一推出就受到軟件開發者們的青睞。目前,所有的加密鎖都提供了可編程的接口。用戶可以控制加密鎖中的內容,在程序中通過加密鎖的接口任意訪問加密鎖。國外加密鎖一般僅提供若干種算法,但好的加密鎖不但可以向客戶提供加密算法,也容許客戶根據自己的意愿自定義加密算法,容許客戶自定義用戶ID號……比如:北京飛天誠信科技公司(網址:www.rockey.com.cn)推出的ROCKEY-IV鎖就是一種加密強度很高產品(見圖1)。但加密鎖也是有一定欠缺的,由于加密鎖利用的是計算機的打印口,而打印口原來是為打印機而設計的,軟件鎖一方面要保證用戶加密操作的正確,同時也要保證打印機工作的正常。但由于打印機驅動程序設計上千差萬別,沒有任何一家的加密鎖能夠完全做到這一點。

  但這一問題現在有希望得到徹底的解決,那就是USB接口的加密鎖。USB接口的加密鎖不但擁有并口加密鎖的所有優點,而且沒有打印上的問題,其前景十分看好。但美中不足的是只有Windows 98和Windows 2000目前能夠支持USB設備。北京飛天誠信科技公司推出的一款ROCKEY-USB加密鎖(見圖2)其安全性優于國外產品,同時售價遠遠低于國外產品。

  由于軟件鎖加密目前是軟件加密的主流方案,所以再特別講一下軟件鎖加密的安全性問題。

  首先從軟件鎖的硬件方面進行研究。早先的軟件鎖由于硬件的加密程度不夠,容易被破解。 近一年的軟件鎖設計大多采用了低電壓CPU為基礎的設計,CPU內部的程序由軟件鎖廠商自行寫入,由于CPU內部的程序是一次寫入而且不可修改、不可讀出的,安全性也比較高,而且由于CPU程序是由軟件鎖生產廠家來寫入,廠家可以根據自己的要求隨時修改軟件鎖內部的程序,靈活性也比較高。

  其次我們從軟件鎖軟件方面考慮一下。實際上大多數黑客攻擊的只是軟件鎖和客戶的軟件方面,真正從硬件角度來破解軟件鎖的比較少。從結構上來說,一個使用軟件鎖進行加密的軟件分為三個部分:1)軟件鎖的驅動程序部分;2)軟件鎖提供的負責同驅動程序進行通訊的具體語言模塊(.OBJ、.DLL……);3)客戶軟件部分。前兩部分都是由軟件鎖的廠家來完成的,都有不同程度的加密與反跟蹤成分,不易被解密。客戶軟件部分相對比較簡單,往往是黑客攻擊的主要部分。軟件鎖的使用環節很多,任何一個環節出了問題,都會造成整個加密方案的失敗。而客戶的使用方法往往是加密成敗的關鍵,如果某個軟件鎖的訪問 后能夠歸結為某個條件判別的話,那么一旦在這里被跳過,整個加密也就失去作用了。規劃一套真正行之有效的加密方案,才能更好地發揮軟件鎖的保護功效。

  4. 光盤加密

  既然有軟盤加密成功在先,為什么不能有光盤加密呢?但實際操作上確實是有一些問題的,因為光盤有ISO9660標準協議規定,其可控制性比軟盤還要嚴格,想找出一種只能運行而不能復制的方式確實很困難。但現在確實已經有幾家這樣的產品出來了,而且加密方法也不盡相同。其主要原理是利用特殊的光盤母盤上的某些特征信息是不可再現的,而且這些特征信息大多是光盤上非數據性的內容,在光盤復制時復制不到的地方。因為投入是一次性的,對于大規模的生產這種加密方案可以將成本降得很低。而且軟件數據和加密在同一載體上,對用戶無疑是很方便的。但這是一種較新的加密方案,很多方面還需進一步驗證。而且由于加密方式所限,不可能在用戶自己刻錄的光盤上實現這種加密,必須是生產線上生產的光盤才能夠實現。這對于一些小規模的軟件生產廠商還是有一定困難的,而且由于光盤的只讀性,一旦加密有錯是無法修復的。

  二、不依賴硬件的加密方案

  所有的帶有附加硬件設備的加密方案都有一定的加密成本在里面,對于那些價格高昂的軟件當然無所謂,但對于那些共享軟件或價格本身就很低的軟件來說,硬件加密成本可能比軟件本身的售價還高,所以近年來產生了很多軟加密方案。

  1. 密碼表加密

  在軟件運行的開始要求用戶根據屏幕的提示信息輸入特定的答案,答案往往在用戶手冊上的一份防復印的密碼表中。用戶只有輸入密碼正確后才能夠繼續運行。這種加密方案實現簡單,不需要太多的成本。但用戶每次運行軟件都要查找密碼,不免使用戶感到十分不便。像臺灣的游戲大多采用此加密方式。而且往往有一些有耐心者把整個密碼表輸入到計算機中存成一個文件,同軟件的盜版一同公布出來,讓加密者無可奈何;旧鲜且环N防君子不防小人的加密方式。

  2. 序列號加密

  這種加密方式從某種角度來講不是一套完整的加密方案,現今很多Shareware(共享軟件)大多采用這種加密方式,用戶在軟件的試用期是不需要交費的,一旦試用期滿還希望繼續使用這個軟件,就必須到軟件公司進行注冊,然后軟件公司會根據你提交的信息(一般是用戶的名字)來生成一個序列號,當你收到這個序列號以后,并在軟件運行的時候輸入進去,軟件會驗證你的名字與序列號之間的關系是否正確,如果正確說明你已經購買了這個軟件,也就沒有日期的限制了。這種加密方案實現簡單,而且購買過程也完全在Internet上實現,無論是開發者和購買者都覺得很方便。不過有心的人可能已經注意到軟件的名字與序列號之間的驗證是在你的計算機上完成的,很多黑客利用這個漏洞找出了名字和序列號之間的換算關系,編寫出一種叫KeyMaker的程序,你只要輸入你的名字,這個程序會幫助你計算出序列號,再將你的名字和這個序列號輸入進軟件中就變成正版軟件了。而且也沒有什么更好的方法來阻止用戶擴散他注冊后得到的序列號。

  3. 許可證加密

  這種方式從某種角度上可以說是序列號加密的一個變種,你從網上下載的或購買過來的軟件并不能直接使用,軟件在安裝時或運行時會對你的計算機進行一番檢測,并根據檢測結果生成一個你的計算機的特定指紋,這個指紋可以是一個小文件,也可以是一串誰也看不懂的數,你需要把這個指紋數據通過Internet、E-mail、電話、傳真等方式發送到開發商那里,開發商再根據這個指紋給你一個注冊碼或注冊文件,你得到這個注冊碼或注冊文件并按軟件要求的步驟在你的計算機上完成注冊后方能使用。這個方法的買賣也是完全通過網絡來進行的,而且用戶購買的軟件被限制只能在他自己的計算機上面運行,換到其他的計算機上,這個注冊碼或注冊文件可能不再有效。但用戶更換某些硬件設備也可能造成注冊碼的失效,而且用戶得到軟件后在完成注冊工作前會有一段時間無法使用。

  加密方案涉及的主要技術

  1.外殼加密

  “外殼”這個詞估計是中國人獨創的,我覺得比較生動貼切,它的意思就是給可執行的文件加上一個外殼。用戶執行的實際上是這個外殼的程序,而這個外殼程序負責把用戶原來的程序在內存中解開壓縮,并把控制權交還給解開后的真正的程序,由于一切工作都是在內存中運行,用戶根本不知道也不需要知道其運行過程,并且對執行速度沒有什么影響。

  如果在外殼程序中加入對軟件鎖或鑰匙盤的驗證部分,它就是我們所說的外殼加密了。其實外殼加密的作用還不止于此,在Internet上面有很多程序是專門為加殼而設計的,它對程序進行壓縮或根本不壓縮,它的主要特點在于反跟蹤,加密代碼和數據,保護你的程序數據的完整性。如果你不希望你的程序代碼被黑客修改,如果你的程序不希望被人跟蹤調試,如果你的算法程序不想被別人靜態分析,這種外殼程序就是為你設計的。

  需要注意的是,有很多網上免費的外殼加密程序兼容性很差,加密后的程序在某些計算機或某些操作系統下無法運行。

  2.序列號加密中的數學算法

  大多數軟件加密本身的實現都是一種編程上的技巧。但近幾年來隨著序列號加密程序的普及,數學算法在軟件加密中的比重越來越大了。

  我們先來看看在因特網上大行其道的序列號加密的工作原理。當用戶從網絡上下載某個Shareware—共享軟件后,一般都有使用時間上的限制,當過了共享軟件的試用期后,你必須到這個軟件的公司去注冊后方能繼續使用。注冊過程一般是用戶把自己的私人信息(一般主要指名字)連同信用卡號碼告訴給軟件公司,軟件公司會根據用戶的信息計算出一個序列碼出來,在用戶得到這個序列碼后,按照注冊需要的步驟在軟件中輸入注冊信息和注冊碼,其注冊信息的合法性由軟件驗證通過后,軟件就會取消掉本身的各種限制。

  軟件驗證序列號的合法性過程,其實就是驗證用戶名與序列號之間的換算關系是否正確的過程。現有的序列號加密算法大多是軟件開發者自行設計的,大部分相當簡單。而且有些算法作者雖然下了很大的工夫,但效果往往達不到它所希望的結果。其實現在有很多現成的加密算法可以使用,如RSADES、MD4、MD5……只不過這些算法是為了加密密文或密碼用的,同序列號加密多少有些不同,如果希望使用這些加密算法的話多少需要動點腦筋。我在這里試舉一例,希望有拋磚引玉的作用:

  1)在軟件程序中有一段加密過的密文S;

  2)密鑰=F(用戶名稱,序列號); (用上面的二元算法得到密鑰)

  3)明文D=F-DES(密文S,密鑰); (用得到的密鑰來解密密文得到明文D)

  4)CRC=F-CRC(明文D); (對得到的明文用各種CRC統計)

  5)檢查CRC是否正確, 好多設計幾種CRC算法,檢查多個CRC結果是否都正確。

  用這種方法,在沒有一個已知正確的序列號的情況下是永遠推算不出正確的序列號的。

  3.解釋、編譯與反編譯

  如果你設計了一種不希望別人知道的特有的算法,所采用的加密手段往往同你的編程語言有很大的關系。對于解釋語言與編譯語言所編制出來的代碼安全性上而言,可以說是各有優缺點。解釋語言有一個致命的弱點,那就是解釋語言的程序代碼都是以偽碼的方式存放的,一旦被人找到了偽碼與源碼之間的對應關系,就很容易做出一個反編譯器出來,你的源程序等于被公開了一樣。而編譯語言因為直接把用戶程序編譯成機器碼,再經過優化程序的優化,很難從程序返回到你的源程序的狀態,但對于熟悉匯編語言的解密者來說,也很容易通過跟蹤你的代碼來確定某些代碼的用途。

  根據我對各種具有反編譯器的語言的了解,Visual Basic 5.0以上版本和C語言還沒有反編譯器。我的建議是:

  1)千萬不能編制功能強大的子程序,如果你程序的一個子程序就能印錢的話,我就不需要看別的了。

  2)多用全局變量, 好是全局的臨時變量,這個變量在每個子程序中的用法都不一樣,程序結構可能不太好,但能造成牽一發而動全身的效果。

  3)如果能用C++的話,盡量用C++來編程, 好把你的算法全用類來實現,哪怕是一個加法減法也給它定義個類,再從子類上面繼承繼承再繼承。

  4)編譯后的程序不能小于500kB。

  4.CPU、操作系統與編程語言

  一個軟件的加密性是否良好同具體的CPU、操作系統與編程語言是有很大關系的。這里有個加密方面的摩爾定律,某種技術的普及化程度越高,那么它的加密性就越差。例如我用VB寫一個程序,其中調用了大量的ActiveX、COM等控件,而且針對MMX、3DNow、SSE……做了具體的優化。這樣的程序比完全用VC寫的程序的安全性要好得多,因為這完全是一種純技術上的比拼,如果某個黑客對VB,ActiveX,COM的技術及內部工作原理十分清楚的話,可能破解這種程序要比用VC編寫的程序容易許多。如果說軟件的加密性同軟件的執行效率是不沖突的話,那么軟件的加密性同軟件的可移植性就很難共存了,因為你不可能希望一個能鎖住所有門的鎖有很好的安全性。不同的平臺、不同的CPU都會產生不同的加密方式,但軟件必然是在特定的CPU和操作系統平臺上執行,針對特定平臺的優化,不但是安全性的要求,更多的是執行效率上的考慮

  我們經常需要一種措施來保護我們的數據,防止被一些懷有不良用心的人所看到或者破壞。在信息時代,信息可以幫助團體或個人,使他們受益,同樣,信息也可以用來對他們構成威脅,造成破壞。在競爭激烈的大公司中,工業間諜經常會獲取對方的情報。因此,在客觀上就需要一種強有力的安全措施來保護機密數據不被竊取或篡改。數據加密與解密從宏觀上講是非常簡單的,很容易理解。加密與解密的一些方法是非常直接的,很容易掌握,可以很方便的對機密數據進行加密和解密。

  一、數據加密方法

  在傳統上,我們有幾種方法來加密數據流。所有這些方法都可以用軟件很容易的實現,但是當我們只知道密文的時候,是不容易破譯這些加密算法的(當同時有原文和密文時,破譯加密算法雖然也不是很容易,但已經是可能的了)。 好的加密算法對系統性能幾乎沒有影響,并且還可以帶來其他內在的優點。例如,大家都知道的PKZIP,它既壓縮數據又加密數據。又如,DBMS的一些軟件包總是包含一些加密方法以使復制文件這一功能對一些敏感數據是無效的,或者需要用戶的密碼。所有這些加密算法都要有高效的加密和解密能力。

  幸運的是,在所有的加密算法中 簡單的一種就是“置換表”算法,這種算法也能很好達到加密的需要。每一個數據段(總是一個字節)對應著“置換表”中的一個偏移量,偏移量所對應的值就輸出成為加密后的文件。加密程序和解密程序都需要一個這樣的“置換表”。事實上,80x86 CPU系列就有一個指令‘XLAT’在硬件級來完成這樣的工作。這種加密算法比較簡單,加密解密速度都很快,但是一旦這個“置換表”被對方獲得,那這個加密方案就完全被識破了。更進一步講,這種加密算法對于黑客破譯來講是相當直接的,只要找到一個“置換表”就可以了。這種方法在計算機出現之前就已經被廣泛的使用。

  對這種“置換表”方式的一個改進就是使用2個或者更多的“置換表”,這些表都是基于數據流中字節的位置的,或者基于數據流本身。這時,破譯變的更加困難,因為黑客必須正確的做幾次變換。通過使用更多的“置換表”,并且按偽隨機的方式使用每個表,這種改進的加密方法已經變的很難破譯。比如,我們可以對所有的偶數位置的數據使用A表,對所有的奇數位置使用B表,即使黑客獲得了明文和密文,他想破譯這個加密方案也是非常困難的,除非黑客確切的知道用了兩張表。

  與使用“置換表”相類似,“變換數據位置”也在計算機加密中使用。但是,這需要更多的執行時間。從輸入中讀入明文放到一個buffer中,再在buffer中對他們重排序,然后按這個順序再輸出。解密程序按相反的順序還原數據。這種方法總是和一些別的加密算法混合使用,這就使得破譯變的特別的困難,幾乎有些不可能了。例如,有這樣一個詞,變換起字母的順序,slient 可以變為listen,但所有的字母都沒有變化,沒有增加也沒有減少,但是字母之間的順序已經變化了。

  但是,還有一種更好的加密算法,只有計算機可以做,就是字/字節循環移位和XOR操作。如果我們把一個字或字節在一個數據流內做循環移位,使用多個或變化的方向(左移或右移),就可以迅速的產生一個加密的數據流。這種方法是很好的,破譯它就更加困難!而且,更進一步的是,如果再使用XOR操作,按位做異或操作,就就使破譯密碼更加困難了。如果再使用偽隨機的方法,這涉及到要產生一系列的數字,我們可以使用Fibbonaci數列。對數列所產生的數做模運算(例如模3),得到一個結果,然后循環移位這個結果的次數,將使破譯次密碼變的幾乎不可能!但是,使用Fibbonaci數列這種偽隨機的方式所產生的密碼對我們的解密程序來講是非常容易的。

  在一些情況下,我們想能夠知道數據是否已經被篡改了或被破壞了,這時就需要產生一些校驗碼,并且把這些校驗碼插入到數據流中。這樣做對數據的防偽與程序本身都是有好處的。但是感染計算機程序的病毒才不會在意這些數據或程序是否加過密,是否有數字簽名。所以,加密程序在每次load到內存要開始執行時,都要檢查一下本身是否被病毒感染,對與需要加、解密的文件都要做這種檢查!很自然,這樣一種方法體制應該保密的,因為病毒程序的編寫者將會利用這些來破壞別人的程序或數據。因此,在一些反病毒或殺病毒軟件中一定要使用加密技術。

  循環冗余校驗是一種典型的校驗數據的方法。對于每一個數據塊,它使用位循環移位和XOR操作來產生一個16位或32位的校驗和 ,這使得丟失一位或兩個位的錯誤一定會導致校驗和出錯。這種方式很久以來就應用于文件的傳輸,例如 XMODEM-CRC。 這是方法已經成為標準,而且有詳細的文檔。但是,基于標準CRC算法的一種修改算法對于發現加密數據塊中的錯誤和文件是否被病毒感染是很有效的。

  二、基于公鑰的加密算法

  一個好的加密算法的重要特點之一是具有這種能力:可以指定一個密碼或密鑰,并用它來加密明文,不同的密碼或密鑰產生不同的密文。這又分為兩種方式:對稱密鑰算法和非對稱密鑰算法。所謂對稱密鑰算法就是加密解密都使用相同的密鑰,非對稱密鑰算法就是加密解密使用不同的密鑰。非常著名的PGP公鑰加密以及RSA加密方法都是非對稱加密算法。加密密鑰,即公鑰,與解密密鑰,即私鑰,是非常的不同的。從數學理論上講,幾乎沒有真正不可逆的算法存在。例如,對于一個輸入‘a’執行一個操作得到結果‘b’,那么我們可以基于‘b’,做一個相對應的操作,導出輸入‘a’。在一些情況下,對于每一種操作,我們可以得到一個確定的值,或者該操作沒有定義(比如,除數為0)。對于一個沒有定義的操作來講,基于加密算法,可以成功地防止把一個公鑰變換成為私鑰。因此,要想破譯非對稱加密算法,找到那個唯一的密鑰,唯一的方法只能是反復的試驗,而這需要大量的處理時間。

  RSA加密算法使用了兩個非常大的素數來產生公鑰和私鑰。即使從一個公鑰中通過因數分解可以得到私鑰,但這個運算所包含的計算量是非常巨大的,以至于在現實上是不可行的。加密算法本身也是很慢的,這使得使用RSA算法加密大量的數據變的有些不可行。這就使得一些現實中加密算法都基于RSA加密算法。PGP算法(以及大多數基于RSA算法的加密方法)使用公鑰來加密一個對稱加密算法的密鑰,然后再利用一個快速的對稱加密算法來加密數據。這個對稱算法的密鑰是隨機產生的,是保密的,因此,得到這個密鑰的唯一方法就是使用私鑰來解密。

  我們舉一個例子:假定現在要加密一些數據使用密鑰‘12345’。利用RSA公鑰,使用RSA算法加密這個密鑰‘12345’,并把它放在要加密的數據的前面(可能后面跟著一個分割符或文件長度,以區分數據和密鑰),然后,使用對稱加密算法加密正文,使用的密鑰就是‘12345’。當對方收到時,解密程序找到加密過的密鑰,并利用RSA私鑰解密出來,然后再確定出數據的開始位置,利用密鑰‘12345’來解密數據。這樣就使得一個可靠的經過高效加密的數據安全地傳輸和解密。

  一些簡單的基于RSA算法的加密算法可在下面的站點找到:

  ftp://ftp.funet.fi/pub/crypt/cryptography/asymmetric/rsa

 三、一個嶄新的多步加密算法

  現在又出現了一種新的加密算法,據說是幾乎不可能被破譯的。這個算法在1998年6月1日才正式公布的。下面詳細的介紹這個算法:

  使用一系列的數字(比如說128位密鑰),來產生一個可重復的但高度隨機化的偽隨機的數字的序列。一次使用256個表項,使用隨機數序列來產生密碼轉表,如下所示:

  把256個隨機數放在一個距陣中,然后對他們進行排序,使用這樣一種方式(我們要記住 初的位置)使用 初的位置來產生一個表,隨意排序的表,表中的數字在0到255之間。如果不是很明白如何來做,就可以不管它。但是,下面也提供了一些原碼(在下面)是我們明白是如何來做的。現在,產生了一個具體的256字節的表。讓這個隨機數產生器接著來產生這個表中的其余的數,以至于每個表是不同的。下一步,使用"shotgun technique"技術來產生解碼表;旧险f,如果 a映射到b,那么b一定可以映射到a,所以b[a[n]] = n.(n是一個在0到255之間的數)。在一個循環中賦值,使用一個256字節的解碼表它對應于我們剛才在上一步產生的256字節的加密表。

  使用這個方法,已經可以產生這樣的一個表,表的順序是隨機,所以產生這256個字節的隨機數使用的是二次偽隨機,使用了兩個額外的16位的密碼.現在,已經有了兩張轉換表,基本的加密解密是如下這樣工作的。前一個字節密文是這個256字節的表的索引。或者,為了提高加密效果,可以使用多余8位的值,甚至使用校驗和或者CRC算法來產生索引字節。假定這個表是256*256的數組,將會是下面的樣子:

  crypto1 = a[crypto0][value]

  變量'crypto1'是加密后的數據,'crypto0'是前一個加密數據(或著是前面幾個加密數據的一個函數值)。很自然的,第一個數據需要一個“種子”,這個“種子” 是我們必須記住的。如果使用256*256的表,這樣做將會增加密文的長度;蛘,可以使用你產生出隨機數序列所用的密碼,也可能是它的CRC校驗和。順便提及的是曾作過這樣一個測試: 使用16個字節來產生表的索引,以128位的密鑰作為這16個字節的初始的"種子"。然后,在產生出這些隨機數的表之后,就可以用來加密數據,速度達到每秒鐘100k個字節。一定要保證在加密與解密時都使用加密的值作為表的索引,而且這兩次一定要匹配。

  加密時所產生的偽隨機序列是很隨意的,可以設計成想要的任何序列。沒有關于這個隨機序列的詳細的信息,解密密文是不現實的。例如:一些ASCII碼的序列,如“eeeeeeee"可能被轉化成一些隨機的沒有任何意義的亂碼,每一個字節都依賴于其前一個字節的密文,而不是實際的值。對于任一個單個的字符的這種變換來說,隱藏了加密數據的有效的真正的長度。

  如果確實不理解如何來產生一個隨機數序列,就考慮FIBBONACCI數列,使用2個雙字(64位)的數作為產生隨機數的種子,再加上第三個雙字來做XOR操作。 這個算法產生了一系列的隨機數。算法如下:

  unsigned long dw1, dw2, dw3, dwMask;

  int i1;

  unsigned long aRandom[256];

  dw1 = {seed #1};

  dw2 = {seed #2};

  dwMask = {seed #3};

  // this gives you 3 32-bit "seeds", or 96 bits total

  for(i1=0; i1 < 256; i1++)

  {

  dw3 = (dw1 + dw2) ^ dwMask;

  aRandom[i1] = dw3;

  dw1 = dw2;

  dw2 = dw3;

  }

  如果想產生一系列的隨機數字,比如說,在0和列表中所有的隨機數之間的一些數,就可以使用下面的方法:

  int __cdecl MySortProc(void *p1, void *p2)

  {

  unsigned long **pp1 = (unsigned long **)p1;

  unsigned long **pp2 = (unsigned long **)p2;

  if(**pp1 < **pp2)

  return(-1);

  else if(**pp1 > *pp2)

  return(1);

  return(0);

  }

  ...

  int i1;

  unsigned long *apRandom[256];

  unsigned long aRandom[256]; // same array as before, in this case

  int aResult[256]; // results go here

  for(i1=0; i1 < 256; i1++)

  {

  apRandom[i1] = aRandom + i1;

  }

  // now sort it

  qsort(apRandom, 256, sizeof(*apRandom), MySortProc);

  // final step - offsets for pointers are placed into output array

  for(i1=0; i1 < 256; i1++)

  {

  aResult[i1] = (int)(apRandom[i1] - aRandom);

  }

  ...

  變量'aResult'中的值應該是一個排過序的唯一的一系列的整數的數組,整數的值的范圍均在0到255之間。這樣一個數組是非常有用的,例如:對一個字節對字節的轉換表,就可以很容易并且非常可靠的來產生一個短的密鑰(經常作為一些隨機數的種子)。這樣一個表還有其他的用處,比如說:來產生一個隨機的字符,計算機游戲中一個物體的隨機的位置等等。上面的例子就其本身而言并沒有構成一個加密算法,只是加密算法一個組成部分。

  作為一個測試,開發了一個應用程序來測試上面所描述的加密算法。程序本身都經過了幾次的優化和修改,來提高隨機數的真正的隨機性和防止會產生一些短的可重復的用于加密的隨機數。用這個程序來加密一個文件,破解這個文件可能會需要非常巨大的時間以至于在現實上是不可能的。

  四、結論

  由于在現實生活中,我們要確保一些敏感的數據只能被有相應權限的人看到,要確保信息在傳輸的過程中不會被篡改,截取,這就需要很多的安全系統大量的應用于政府、大公司以及個人系統。數據加密是肯定可以被破解的,但我們所想要的是一個特定時期的安全,也就是說,密文的破解應該是足夠的困難,在現實上是不可能的,尤其是短時間內。


想在此處做廣告,請聯系QQ:879330360
百度中找“當前各種加密方案完全解析”的內容
GOOGLE中找“當前各種加密方案完全解析”的內容
關鍵詞:當前各種加密方案完全解析 相關文章
相關推薦文章
熱門文章
新文章
想在此處做廣告,請聯系QQ:879330360
家電維修班,手機維修班,電腦維修班,電工班,焊工班,液晶電視維修班,電動工具維修班、電動車摩托車維修班、網絡營銷培訓、網站設計培訓、淘寶培訓---全國招生 家電維修班,手機維修班,電腦維修班,電工班,焊工班,液晶電視維修班,電動工具維修班、電動車摩托車維修班、網絡營銷培訓、網站設計培訓、淘寶培訓---全國招生 主站蜘蛛池模板: 麻豆精品乱码WWW久久密 | 小处雏一区二区三区 | 啊好大好厉害好爽真骚 | 亚洲精品123区在线观看 | 亚洲精品第五页中文字幕 | 免费观看男生桶美女私人部位 | 俄罗斯6一12呦女精品 | 国产三级多多影院 | 欧美成 人 网 站 免费 | 亚洲国产日韩欧美在线a乱码 | 美女张开腿让我了一夜 | 在线视频网站www色 在线视频免费国产成人 | 久久久WWW免费人成精品 | 国产色精品久久人妻无码看片 | 日本护士在线观看 | 国产偷国产偷亚州清高APP | 99精品成人无码A片观看金桔 | 国产盗摄一区二区三区 | 古月娜下面好紧好爽 | 性欧美13处14处破 | 狠狠色丁香婷婷久久综合 | 手机在线播放成人亚洲影院电影 | 第一精品福利导福航 | 影音先锋xfplay影院av | 寂寞护士中文字幕 mp4 | 欧美精品乱码99久久蜜桃 | 旧里番YY6080在线播放 | 芭乐草莓樱桃丝瓜18岁大全 | 国产人妖一区二区 | 免费观看视频成人国产 | 秋霞成人午夜鲁丝一区二区三区 | 视频成人永久免费视频 | 国产亚洲精品AV片在线观看播放 | 女人高潮时一吸一夹 | 88福利视频| 国产成人免费高清视频 | 国产成人精品久久一区二区三区 | 欧美精品亚洲精品日韩专区一 | 亚洲精品免费观看 | 中文字幕无码一区二区免费 | 真实国产乱子伦精品一区二区三区 |