實現(xiàn)文件簡單的加密和解密_第1頁
實現(xiàn)文件簡單的加密和解密_第2頁
實現(xiàn)文件簡單的加密和解密_第3頁
實現(xiàn)文件簡單的加密和解密_第4頁
實現(xiàn)文件簡單的加密和解密_第5頁
已閱讀5頁,還剩62頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

北京郵電大學(xué)畢業(yè)設(shè)計緒論1.1論文背景信息安全是一個綜合性的交叉學(xué)科領(lǐng)域,廣泛涉及數(shù)學(xué)、密碼學(xué)、計算機、通信控制、人工智能、安全工程、人文科學(xué)等諸多學(xué)科,是近幾年迅速發(fā)展的一個熱點學(xué)科領(lǐng)域。信息對抗和網(wǎng)絡(luò)安全是信息安全的核心熱點,它的研究和發(fā)展又將刺激、推動和促進相關(guān)學(xué)科的研究與發(fā)展。網(wǎng)絡(luò)技術(shù)的快速發(fā)展,給我們的生活帶來了方便,提高了我們的工作效率,豐富了我們的生活,但同時,安全問題也時刻困擾著我們。連接在網(wǎng)絡(luò)上的計算機隨時都有被黑客攻擊的可能,在網(wǎng)絡(luò)上收發(fā)的文件也有可能被黑客截獲,而這種不安全的因素是TCP/IP協(xié)議所固有的,所以為了保護重要的文件安全,我們必須給重要的文件加密。本論文講述了加密技術(shù)的實現(xiàn)。通過數(shù)據(jù)加密,人們可以有效地保證個人數(shù)據(jù)的安全,以及在通信線路上的內(nèi)容不被泄露,而且還可以檢驗傳送信息的完整性。1.2主要工作實現(xiàn)文件簡單的加密和解密,保護數(shù)據(jù)安全。實現(xiàn)文件校驗功能,用于驗證文件的完整性和正確性。通過覆蓋技術(shù)使刪除的文件不可恢復(fù),實現(xiàn)文件粉碎功能。設(shè)計一套完整的加密體系,在核心代碼運行前優(yōu)先取得程序控制權(quán)做校驗工作,保護軟件的安全。1.3本文結(jié)構(gòu)本文第一部分主要以緒論為主,說明了文章的研究背景、主要工作,概要說明了所做的工作。第二部分主要是文件加密解密的相關(guān)知識的介紹,介紹了AES算法的原理。第三部分敘述了設(shè)計的思路、重點。第四部分為設(shè)計結(jié)果及分析,將勞動成果展現(xiàn)給大家。第五部分為結(jié)論、致謝和參考文獻,列出了文章的參考文獻和引用文獻,反映本文研究工作的背景和依據(jù)。2AES介紹2.1AES概述AES是一個迭代的、對稱密鑰分組的加密算法,即它的加密和解密過程都使用同一個密鑰。AES分組密碼接受一個128位的明文,并且在一個128、192、256位秘密密鑰的控制下產(chǎn)生一個128位的密文。它是一個替代-置換網(wǎng)絡(luò)的設(shè)計,并且?guī)в幸粋€稱為輪的步驟的集合,其中輪數(shù)可以為9、11或者13(對應(yīng)于128、192或者256位的密鑰),這樣可以將明文映射為密文。一輪AES由下面的4步組成:(1)字節(jié)替代(SubBytes):用一個S盒完成分組中的按字節(jié)的代換。(2)行移位(ShiftRows):一個簡單的置換。(3)列混淆(MixColumns):一個利用在域GF()上的算術(shù)特性的代換。(4)輪密鑰加(AddRoundKey):利用當前分組和擴展密鑰的一部分進行按位XOR。每一輪分別使用它自己的128位輪密鑰(roundkey),它是由秘密密鑰通過一個稱為密鑰調(diào)度(keyschedule)的過程處理而產(chǎn)生的。不要低估一個設(shè)計合理的密鑰調(diào)度方案的重要性。它把密鑰的熵散發(fā)給每一個輪密鑰。如果熵沒有被很好地傳播,就會產(chǎn)生各種麻煩,例如等價密鑰、相關(guān)密鑰以及其他類似的分別征服攻擊(distinguishingattack)。AES把128位的輸入看作是一個由16個字節(jié)組成的向量,并用一個4x4的列矩陣(big-endian)的形式來組織,叫做狀態(tài)(state)。即第1個字節(jié)映射為,第3個字節(jié)映射為,第4個字節(jié)為,第16個字節(jié)映射為,如圖2-1所示。A0.0A0.1A0.2A0.3A1.0A1.1A1.2A1.3A2.0A2.1A2.2A2.3A3.0A3.1A3.2A3.3圖2-1AES的狀態(tài)示意圖整個AES分組密碼由下面的步驟組成:(1)AddRoundKey(round=0)(2)forround=1到Nr-1(9、11或者13,這取決于密鑰的大小)doSubBytesShiftRowsMixColumnsAddRoundKey(round)(3)SubBytes(4)ShiftRows(5)AddRoundKey(Nr)2.2輪密鑰加(AddRoundKey)輪函數(shù)的這一步是把輪密鑰加到狀態(tài)中(在GF(2)中)。它執(zhí)行了16個并行的把密鑰加到狀態(tài)中的運算。GF(2)的加法是通過異或運算來完成的,如圖2-2所示。圖2-2AESAddRoundKey函數(shù)其中的K炬陣是一個輪密鑰并且對每一輪都有一個惟一的密鑰。因為密鑰的加法是一個簡單的異或,所以它常實現(xiàn)為在32位軟件中從列開始的一個32位的異或操作。2.3字節(jié)替代(SubBytes)輪函數(shù)的SubBtes步驟是用來執(zhí)行SPN中的非線性混清步驟的。它把16個字節(jié)的每一個都并行地映射為一個新的字節(jié),這是通過一個兩步驟的替代操作來完成的,如圖2-3所示。圖2-3AESSubBytes函數(shù)該映射變化是一個簡單的查表操作,AES定義了一個S盒,如表2.1所示,它是由16*16個字節(jié)組成的矩陣,包含了8位值所能表達的256種可能的變換。State中每個字節(jié)按照如下的方式映射為一個新的字節(jié):把該字節(jié)的高4位作為行值,低4位作為列值,然后取出S盒中對應(yīng)行列的元素作為輸出。例如,十六進制值95所對應(yīng)的S盒的行值是9,列值是5,S盒中在此位置的值是2A。相應(yīng)地,95被映射為2A。表2.1AES的S盒y0123456789ABCDEFx0637C777BF26B6FC53001672BFED7AB761CA82C97DFA5947F0ADD4A2AF9CA472C02B7FD9326363FF7CC34A5E5F171D83115304C723C31896059A071280E2EB27B275409832C1A1B6E5AA0523BD6B329E32F84553D100ED20FCB15B6ACBBE394A4C58CF6D0EFAAFB434D338545F9027F503C9FA8續(xù)表2.1AES的S盒751A3408F929D38F5BCB6DA2110FFF3D28CD0C13EC5F974417C4A77E3D645D1973960814FDC222A908846EEB814DE5E0BDBAE0323A0A4906245CC2D3AC639195E479BE7C8376D8DD54EA96C56F4EA657AAE08CBA78252E1CA6B4C6E8DD741F4BBD8B8AD703EB5664803F60E613557B986C11D9EEE1F8981169D98E949B1E87E9CE5528DFF8CA1890DBFE6436841992D0FB054BB16S盒被設(shè)計成能防止已有的各種密碼分析攻擊。AES的開發(fā)者特別尋求在輸入位和輸出位之間幾乎沒有相關(guān)性的設(shè)計,且輸出值不能通過利用一個簡單的數(shù)學(xué)函數(shù)變換輸入值所得到。當然,S盒必須是可逆的,即逆S盒[S盒(a)]=a。然而,因S盒(a)=逆S盒(a)不成立,在這個意義上S盒不是自逆的。例如,S盒(95)=2A,但逆S盒(95)=AD。2.4行移位(ShiftRows)ShiftRows這一步對狀態(tài)中的每一行分別進行向左循環(huán)移動0、1、2和3個位置。它是完全線性的,如圖2-4所示。圖2-4AESShiftRows函數(shù)在實際應(yīng)用中,我們將會看到這是通過重命名(renaming)來實現(xiàn)的而不是一個實際的移動。也就是說,通過對字節(jié)移動的替代,我們只是簡單地在得到它們的地方對它們進行修改就可以。在32位的軟件中,我們可以很容易地把ShiftRows和SubBytes以及MixColumns混合,而不用來回交換字節(jié)。2.5列混淆(MixColumns)MixColumns這一步對狀態(tài)中的每一列乘上一個4*4的變換,這個變換就是所謂的極大距離可分碼(MaximallyDistanceSeparable,MDS)。這一步的目的是擴大差別并且讓輸出線性依賴于其他輸人。即如果一個單一的輸入字節(jié)在兩個明文中發(fā)生了改變(輸入中所有其他的字節(jié)沒變),這個改變將盡可能快地傳播到狀態(tài)中的其他字節(jié)中去,如圖2-5所示。圖2-5AESMixColumns列混淆變換和行移位變換使得在經(jīng)過幾輪變換后,所有的輸出位均與所有的輸入位相關(guān)。2.6密鑰調(diào)度(KeySchedule)密鑰調(diào)度是負責把輸人的密鑰轉(zhuǎn)化成所需的Nr+1個128位輪密鑰。圖2-6中的算法將計算輪密鑰。輸入:Nk密鑰中的32位字的個數(shù)(4、6或者8)w4×(Nr+1)個32位字的數(shù)組輸出:w使用密鑰來設(shè)顯一個數(shù)組(1)以big-endian的格式把秘密密鑰預(yù)加載到w的第一個Nk字中(2)i=Nk(3)while(i<4*(Nr+1))do(1)temp=w[i-1](2)if(imodNk=0)temp=SubWord(RotWord(temp))XORRcon[i/Nk](3)elseif(Nk>6andimodNk=4)temp=SubWord(temp)(4)w[i]=w[i-Nk]xortemp(5)i=i+1圖2-6AES密鑰調(diào)度密鑰調(diào)度還需要兩個額外的函數(shù)。SubWord()的輸人為32位并且并行地把每個字節(jié)發(fā)送給AES的SubBytes替代表中。RotWord()把字向右循環(huán)移動8位。Rcon表是一個數(shù)組,它只存儲了多項式g(x)=x的前10個幕模AES多項式的最高字節(jié)。3系統(tǒng)設(shè)計3.1設(shè)計概述此次畢業(yè)設(shè)計采用的開發(fā)工具是VisualStudio2010,所選用的開發(fā)語言是C++,軟件名稱為:文件管家。目前網(wǎng)絡(luò)上,文件加密與解密的軟件比較多,功能也比較強大,之所以會選擇“實現(xiàn)文件簡單的加密和解密”這個題目,并且去設(shè)計一款這方面的軟件,主要有兩方面原因:一是因為一直對信息安全比較感興趣,也雜七雜八的看過一些這方面的資料,想通過這次畢業(yè)設(shè)計,學(xué)以致用;二是因為之前用過一些文件加解密的軟件,但是感覺操作比較復(fù)雜,當然它們的功能都比較強大,但作為普通用戶,我們可能并不需要那么強大而復(fù)雜的功能,所以這次畢業(yè)設(shè)計,想在用戶體驗上下一些功夫,設(shè)計一款能夠滿足我們?nèi)粘P枰奈募咏饷苘浖???傮w的設(shè)計思路是:既要保證文件的安全性,也要兼顧用戶體驗,避免繁瑣的操作。本次畢業(yè)設(shè)計的核心內(nèi)容分為兩部分,一部分是文件加密,作為一款文件加密軟件,最主要的內(nèi)容就是文件加密的安全性,即采用這款軟件加密后的文件,會不會被人輕易解密;另一部分是軟件安全,我們知道,軟件的開發(fā)流程是編輯、編譯、調(diào)試,然后就是發(fā)布可執(zhí)行文件。可執(zhí)行文件對一般用戶來說,就是一個小程序,但是對于一些別有用心的人,它不僅是一個小程序,它還是程序的源碼,他能夠把可執(zhí)行文件還原為源文件,這樣我們程序里的算法就被他一覽無余,所以我們在發(fā)布之前還需要對可執(zhí)行文件做一些工作,來保護軟件的安全性,由其我們這是一款加密軟件,在保護文件安全的同時,也要做好自身的防護工作。3.1.1界面設(shè)計界面主體采用選項卡設(shè)計,共有3個選項卡,分別是加密、解密和工具箱。加密選項卡用于完成文件加密,解密選項卡用于完成文件解密,工具箱選項卡包含文件校驗和文件粉碎兩個界面。3.1.2實現(xiàn)代碼設(shè)計加解密程序,采用AES算法。文件校驗,采用MD5算法。文件粉碎,刪除文件之后,會用空數(shù)據(jù)或隨機數(shù)據(jù)多次覆蓋在原數(shù)據(jù)上,保證刪除之后的文件不能被還原。軟件安全:第一次使用,需要輸入注冊碼(輸入后保存到配置文件里)。每次運行軟件前,根據(jù)注冊碼生成一個key(算法不可逆),用key解密核心代碼(算法可逆),解密后根據(jù)核心代碼生成一個校驗碼(算法不可逆),與存在程序里的校驗碼比較,不正確提示并退出程序,正確則進入程序。3.1.3操作流程第一次運行程序,需要以管理員身份運行程序,完成修改注冊表和生成配置文件的功能。再次運行程序,需要輸入注冊碼,正確則保存注冊碼到配置文件并進入程序,不正確則不保存注冊碼并提示退出程序。加密:鼠標右鍵單擊需要加密的文件,資源管理器菜單會出現(xiàn)“文件管家”的選項,點擊即會出現(xiàn)文件加密對話框,輸入加密密碼和確認密碼,點擊加密,即可完成加密操作。需要注意的是,執(zhí)行加密操作默認刪除源文件,可以在點擊加密之前,去掉“加密后,刪除源文件”前面的勾,則不會刪除源文件。解密:加密完成后,文件后綴變?yōu)镸YFM(MyFileManager的縮寫),加密后的文件圖標會被換成“文件管家”的LOGO。要解密的時候,直接雙擊該文件,默認用文件管家打開,輸入密碼即可完成解密操作。總體來看,程序操作簡潔,用戶體驗比較好。3.2界面設(shè)計運行VS2010,創(chuàng)建一個MFC項目,命名為:文件管家。項目建好后,將默認對話框作為加密解密工具的主界面。在主界面添加一個TabControl,需要三個選項卡,分別是:加密、解密和工具箱,下面分別對這三個選項卡做詳細的設(shè)計,設(shè)計時要用到vs2010里工具箱的工具。詳細設(shè)計如下:3.2.1LOGO設(shè)計圖3-1LOGO采用黑色主元素,黑色代表未知,即加密后文件比較安全,如圖3-1所示。3.2.2加密選項卡的設(shè)計圖3-2加密選項卡屬性設(shè)置建立一個對話框資源,Style屬性設(shè)為Child,Border屬性設(shè)為None,如圖3-2所示。解密選項卡和工具箱選項卡同加密選項卡。圖3-3加密選項卡界面設(shè)計加密選項卡最上面是一個不可讀的EditControl,用來顯示需要加密文件的文件名,因為文件名不需要更改,所以這里設(shè)置EditControl的Disabled為True。在加密時需要輸入加密密碼,為了避免因用戶按錯鍵而導(dǎo)致密碼不正確,這里需要輸入確認密碼。接著是一個Check-boxControl,用來選擇加密后是否刪除源文件,默認刪除源文件。最后是兩個ButtonControl,分別為:加密和取消。點擊加密,則執(zhí)行加密操作;點擊取消,則放棄加密操作,并退出程序,如圖3-3所示。3.2.3解密選項卡的設(shè)計圖3-4解密選項卡界面設(shè)計解密選項卡最上面是一個不可讀的EditControl,用來顯示需要解密文件的文件名,因為文件名不需要更改,所以這里設(shè)置EditControl的Disabled為True。接著又是一個EditControl,用來輸入解密密碼。接著是一個Check-boxControl,用來選擇解密后是否刪除源文件,默認刪除源文件。最后是兩個ButtonControl,分別為:解密和取消。點擊解密,則執(zhí)行解密操作;點擊取消,則放棄解密操作,并退出程序,如圖3-4所示。3.2.4工具箱選項卡的設(shè)計圖3-5工具箱選項卡界面設(shè)計工具箱選項卡包含兩部分,文件校驗和文件粉碎,工具箱選項卡最上面是一個EditControl,用來顯示當前正在操作文件的文件名,如圖3-5所示。文件校驗:包含一個EditControl,用來顯示當前文件的MD5值。文件粉碎:包含一個EditControl用來設(shè)置擦寫次數(shù),次數(shù)必須大于等于0。緊挨著EditControl的是一個SpinControl,用來增減EditControl里值。之后是兩個Radio-button-Control,用來選擇填充數(shù)據(jù),默認選擇空數(shù)據(jù),用空數(shù)據(jù)來擦寫源文件所在的磁盤位置。最后是兩個ButtonControl,分別為:粉碎和取消。點擊粉碎,則執(zhí)行粉碎操作;點擊取消,則放棄粉碎操作,并退出程序。3.3實現(xiàn)代碼設(shè)計在界面設(shè)計的基礎(chǔ)上,進行代碼設(shè)計。第一次運行程序,需要輸入注冊碼(若正確則保存到配置文件中),之后每次運行都要根據(jù)注冊碼生成key(不可逆算法),然后用key解密核心代碼(可逆算法),解密后根據(jù)核心代碼生成一個校驗碼(不可逆算法),與存在程序里的校驗碼比較,不正確提示并退出程序,正確則進入程序,這些代碼放在主對話框的OnInitDialog()函數(shù)中,在程序初始化時運行。其余詳細設(shè)計如下:3.3.1加密選項卡的設(shè)計圖3-6加密選項卡添加處理類使用ClassWizard生成新的類,基類為CDialogEx,對話框ID為IDD_DIALOG1,類名為:CPage1,這樣就為加密選項卡創(chuàng)建了一個類,所有對加密選項卡的操作,都可以寫在CPage1類中,如圖3-6所示。(解密選項卡、工具箱選項卡同)圖3-7加密選項卡程序運行時,首先讀取當前操作文件的文件名,顯示在文件名編輯框中,如圖3-7所示。點擊加密按鈕后,首先判斷加密密碼和確認密碼是否為空,若為空則彈出MessageBox,并中斷執(zhí)行加密函數(shù),重新回到輸入界面,等待用戶輸入。若加密密碼和確認密碼都不為空,則判斷加密密碼和確認密碼是否相同,若不相同,則彈出MessageBox,并中斷執(zhí)行加密函數(shù),重新回到輸入界面,等待用戶輸入。若加密密碼和確認密碼相同,則讀取Check-boxControl的值,以確認是否刪除源文件。最后調(diào)用AES算法,執(zhí)行文件加密操作,加密成功后,彈出MessageBox,并退出程序。點擊取消按鈕,什么操作都不做,直接退出程序。3.3.2解密選項卡的設(shè)計圖3-8解密選項卡程序運行時,首先讀取當前操作文件的文件名,顯示在文件名編輯框中,如圖3-8所示。點擊解密按鈕后,首先判斷解密密碼是否為空,若為空則彈出MessageBox,并中斷執(zhí)行解密函數(shù),重新回到輸入界面,等待用戶輸入。若解密密碼不為空,則讀取Check-boxControl的值,以確認是否刪除源文件。最后調(diào)用AES算法,執(zhí)行文件解密操作,解密成功后,彈出MessageBox,并退出程序。點擊取消按鈕,什么操作都不做,直接退出程序。3.3.3工具箱選項卡的設(shè)計圖3-9工具箱選項卡程序運行時,首先讀取當前操作文件的文件名,顯示在文件名編輯框中。調(diào)用MD5算法,根據(jù)當前文件的內(nèi)容生成MD5信息值,顯示在MD5編輯框中,來校驗這個文件是否被“篡改”過,如圖3-9所示。點擊粉碎按鈕后,首先讀取擦寫次數(shù),然后讀取Radio-button-Control,確定填充數(shù)據(jù),用空數(shù)據(jù)或隨機數(shù)據(jù)填充。最后調(diào)用粉碎函數(shù),執(zhí)行文件粉碎操作,即用填充數(shù)據(jù)填充當前文件,重復(fù)擦寫次數(shù)次。粉碎成功后,彈出MessageBox,并退出程序。點擊取消按鈕,什么操作都不做,直接退出程序。3.3.4程序流程圖(1)注冊碼模塊流程圖,如圖3-10所示。圖3-10注冊驗證流程圖(2)加密模塊流程圖,如圖3-11所示。圖3-11加密流程圖(3)解密模塊流程圖,如圖3-12所示。圖3-12解密流程圖(4)粉碎模塊流程圖,如圖3-13所示。圖3-13文件粉碎流程圖4設(shè)計結(jié)果及分析4.1設(shè)計結(jié)果展示4.1.1軟件初始化(1)右鍵以管理員身份運行文件管家,如圖4-1所示。圖4-1以管理員身份運行程序(2)創(chuàng)建配置文件,如圖4-2所示。圖4-2創(chuàng)建配置文件(3)修改注冊表-添加”文件管家“到資源管理器右鍵菜單,如圖4-3所示。圖4-3添加到資源管理器右鍵菜單(4)修改注冊表-自定義資源管理器右鍵菜單中圖標,如圖4-4所示。圖4-4設(shè)置資源管理器右鍵菜單圖標(5)修改注冊表-自定義文件類型,如圖4-5所示。圖4-5自定義文件類型(6)修改注冊表-自定義文件類型圖標,如圖4-6所示。圖4-6設(shè)置自定義文件類型圖標(7)修改注冊表-自定義文件類型默認打開程序,如圖4-7所示。圖4-7設(shè)置自定義文件類型默認打開程序4.1.2注冊碼驗證(1)再次雙擊運行程序,彈出注冊碼輸入框,如圖4-8所示。圖4-8雙擊運行程序(2)輸入錯誤的注冊碼,彈出提醒對話框,并退出程序,如圖4-9所示。圖4-9注冊碼錯誤提示(3)輸入正確的注冊碼,進入程序主界面,如圖4-10所示。圖4-10注冊碼正確,進入程序(4)正確的注冊碼保存到配置文件中,以后就不需要輸入注冊碼了,如圖4-11所示。圖4-11注冊碼保存在配置文件到這里,軟件的初始化工作全部完成,下面就可以使用文件管家來進行文件加密、文件解密、文件校驗和文件粉碎功能了。4.1.3文件加密(1)右鍵單擊需要加密的文件,在彈出的資源管理器右鍵菜單中選擇“文件管家”,如圖4-12所示。圖4-12右鍵單擊需要加密的文件(2)確認密碼為空,如圖4-13所示。圖4-13密碼為空提示(3)加密密碼和確認密碼不一致,如圖4-14所示。圖4-14密碼不一致提示(4)加密密碼和確認密碼一致,如圖4-15所示。圖4-15加密成功提示(5)加密后的文件后綴為MYFM,圖標為文件管家logo,如圖4-16所示。圖4-16加密后圖標變化(6)打開文件,全部為亂碼,加密成功,如圖4-17所示。圖4-17加密后內(nèi)容為亂碼4.1.4文件解密(1)雙擊需要解密的文件,如圖4-18所示。圖4-18雙擊需要解密的文件(2)解密密碼為空,如圖4-19所示。圖4-19密碼為空提示(3)備份一份加密后的文件,輸入錯誤的解密密碼,打開解密后的文件,依然為亂碼,如圖4-20所示。圖4-20帶解密文件為亂碼(4)輸入正確的解密密碼,打開解密后的文件,解密成功,如圖4-21所示。圖4-21解密后文件恢復(fù)4.1.5文件校驗(1)右鍵單擊需要校驗的文件,在彈出的資源管理器右鍵菜單中選擇“文件管家”,在彈出的界面中,選擇“工具箱”選項卡,如圖4-22所示。圖4-22MD5校驗4.1.6文件粉碎(1)右鍵單擊需要粉碎的文件,在彈出的資源管理器右鍵菜單中選擇“文件管家”,在彈出的界面中,選擇“工具箱”選項卡,修改擦寫次數(shù)和填充數(shù)據(jù),如圖4-23所示。圖4-23文件粉碎4.2設(shè)計結(jié)果分析及說明4.2.1軟件初始化File:CFileManagerDlg.cppMethod:CFileManagerDlg::OnInitDialog()FILE*pf=fopen(exepath,"r");if(pf==NULL)//根據(jù)是否有配置文件,判斷程序是否為第一次運行{ pf=fopen(exepath,"w+");//創(chuàng)建配置文件(配置文件用來存放注冊碼) HKEYhkey;//調(diào)用RegCreateKey時用到,得到一個key的句柄 /*將文件管家添加到資源管理器右鍵菜單*/ //獲取HKEY_CLASSES_ROOT下"*\\shell\\文件管家\\command"鍵的句柄 RegCreateKey(HKEY_CLASSES_ROOT,"*\\shell\\文件管家\\command",&hkey); //得到文件管家的絕對路徑 GetModuleFileName(NULL,exepath.GetBuffer(MAX_PATH),MAX_PATH); //用ReleaseBuffer去掉exepath沒有用到的空間 //因為exepath.GetBuffer(MAX_PATH)得到了一個存放路徑的最大空間 exepath.ReleaseBuffer(); exepath="\""+exepath+"\"\"%1\"";//拼接字符串,使其為cmd命令 //在hkey中注冊一個名為exepath的值 //其值為(constBYTE*)exepath.GetBuffer(exepath.GetLength()) //長度為exepath.GetLength() RegSetValueEx(hkey,NULL,0,REG_SZ, (constBYTE*)exepath.GetBuffer(exepath.GetLength()), exepath.GetLength()); RegCloseKey(hkey);//釋放指定注冊鍵的句柄hkey /*設(shè)置文件管家資源管理器右鍵菜單的圖片*/ //獲取HKEY_CLASSES_ROOT下"*\\shell\\文件管家"鍵的句柄 RegCreateKey(HKEY_CLASSES_ROOT,"*\\shell\\文件管家",&hkey); //得到文件管家的絕對路徑 GetModuleFileName(NULL,exepath.GetBuffer(MAX_PATH),MAX_PATH); exepath.ReleaseBuffer();//用ReleaseBuffer去掉exepath沒有用到的空間 //拼接字符串,使其為圖標路徑 ch='\\'; n=exepath.ReverseFind(ch); exepath=exepath.Left(n); exepath=exepath+"\\src\\logo.ico"; //在hkey中注冊一個名為exepath的值 //其值為(constBYTE*)exepath.GetBuffer(exepath.GetLength()), //長度為exepath.GetLength() RegSetValueEx(hkey,"icon",0,REG_SZ, (constBYTE*)exepath.GetBuffer(exepath.GetLength()), exepath.GetLength()); RegCloseKey(hkey);//釋放指定注冊鍵的句柄hkey /*自定義文件類型*/ //HKEY_CLASSES_ROOT\.myfm RegCreateKey(HKEY_CLASSES_ROOT,".myfm",&hkey); exepath="FileManager.File"; //在hkey中注冊一個名為exepath的值 //其值為(constBYTE*)exepath.GetBuffer(exepath.GetLength()) //長度為exepath.GetLength() RegSetValueEx(hkey,NULL,0,REG_SZ, (constBYTE*)exepath.GetBuffer(exepath.GetLength()), exepath.GetLength()); RegCloseKey(hkey);//釋放指定注冊鍵的句柄hkey /*自定義文件類型,默認打開程序*/ //HKEY_CLASSES_ROOT\FileManager.File\shell\open\command RegCreateKey(HKEY_CLASSES_ROOT,"FileManager.File\\shell\\open\\command",&hkey); //得到文件管家的絕對路徑 GetModuleFileName(NULL,exepath.GetBuffer(MAX_PATH),MAX_PATH); exepath.ReleaseBuffer();//用ReleaseBuffer去掉exepath沒有用到的空間 exepath="\""+exepath+"\"\"%1\"2";//拼接字符串,使其為cmd命令 //在hkey中注冊一個名為exepath的值 //其值為(constBYTE*)exepath.GetBuffer(exepath.GetLength()) //長度為exepath.GetLength() RegSetValueEx(hkey,NULL,0,REG_SZ, (constBYTE*)exepath.GetBuffer(exepath.GetLength()), exepath.GetLength()); RegCloseKey(hkey);//釋放指定注冊鍵的句柄hkey /*自定義文件類型圖標*/ //HKEY_CLASSES_ROOT\FileManager.File\DefaultIcon RegCreateKey(HKEY_CLASSES_ROOT,"FileManager.File\\DefaultIcon",&hkey); //得到文件管家的絕對路徑 GetModuleFileName(NULL,exepath.GetBuffer(MAX_PATH),MAX_PATH); exepath.ReleaseBuffer();//用ReleaseBuffer去掉exepath沒有用到的空間 //拼接字符串,使其為圖標路徑 ch='\\'; n=exepath.ReverseFind(ch); exepath=exepath.Left(n); exepath=exepath+"\\src\\logo.ico"; //在hkey中注冊一個名為exepath的值 //其值為(constBYTE*)exepath.GetBuffer(exepath.GetLength()) //長度為exepath.GetLength() RegSetValueEx(hkey,NULL,0,REG_SZ, (constBYTE*)exepath.GetBuffer(exepath.GetLength()), exepath.GetLength()); RegCloseKey(hkey);//釋放指定注冊鍵的句柄hkey //第一次運行,修改注冊表、創(chuàng)建配置文件后,程序退出 CFileManagerDlg::OnCancel(); returnTRUE;}4.2.2注冊碼驗證File:CFileManagerDlg.cppMethod:CFileManagerDlg::OnInitDialog()CStringstrRegKey;//存放注冊碼GetPrivateProfileString("REG","key","", strRegKey.GetBuffer(MAX_PATH),MAX_PATH, exepath);//讀取配置文件中的注冊碼strRegKey.ReleaseBuffer();//釋放沒有用到的空間if(strRegKey.IsEmpty()){ //彈出輸入注冊碼對話框 CRegregDlg; if(regDlg.DoModal()==IDOK) { strRegKey=regDlg.strRegKey;//點擊確定按鈕,讀注冊碼IDC_EDIT_REG } else { //點擊取消按鈕,退出程序 CFileManagerDlg::OnCancel(); returnTRUE; }}//(1)根據(jù)注冊碼得到keyLPSTRpRegKey=(LPSTR)(LPCTSTR)strRegKey;charkey='\0';charchTmp='\0';while(chTmp=*pRegKey++){ /* 一個char8位,2^8=256種可能,若窮舉攻擊,需256種可能 本次畢業(yè)設(shè)計重點在于體系設(shè)計,故采用一字節(jié)。 */ key^=chTmp;}//(2)根據(jù)key解密核心代碼/* 解密核心代碼 正確key=0x52'R' 核心代碼長度:63字節(jié)*/DecryptKernelCode(63,key);//(3)驗證核心代碼的正確性,若正確,寫注冊碼到ini文件,若錯誤,提示并退出。/* 驗證核心代碼的正確性*/boolb=CFileManagerDlg::VerifyKernelCode(63);if(!b)//注冊碼錯誤{ //將配置文件置空 WritePrivateProfileString("REG","key","",exepath); MessageBox("注冊碼錯誤!"); CFileManagerDlg::OnCancel(); returnTRUE;}else//注冊碼正確{//將注冊碼寫回配置文件 WritePrivateProfileString("REG","key",strRegKey,exepath);}File:CFileManagerDlg.cppMethod:CFileManagerDlg::DecryptKernelCode()voidCFileManagerDlg::DecryptKernelCode(intnLen,charkey)//解密核心代碼{ //修改內(nèi)存屬性 //核心代碼地址:0x0069EBA4 DWORDoldProtect; VirtualProtect((void*)0x0069EBA4,nLen, PAGE_EXECUTE_READWRITE,&oldProtect); unsignedcharary[1];//用來訪問關(guān)鍵代碼 for(inti=0;i<nLen;i++) { //還原關(guān)鍵數(shù)據(jù),可逆算法 ary[0x0069EBA4-(int)ary+i]=ary[0x0069EBA4-(int)ary+i]^key; } VirtualProtect((void*)0x0069EBA4,nLen,oldProtect,&oldProtect);//還原內(nèi)存屬性}File:CFileManagerDlg.cppMethod:CFileManagerDlg::VerifyKernelCode()boolCFileManagerDlg::VerifyKernelCode(intnLen)//驗證核心代碼的正確性{ //修改內(nèi)存屬性 //核心代碼地址:0x0069EBA4 DWORDoldProtect; VirtualProtect((void*)0x0069EBA4,nLen, PAGE_EXECUTE_READWRITE,&oldProtect); unsignedcharary[1];//用來訪問關(guān)鍵代碼 unsignedcharverify='\0'; for(inti=0;i<nLen;i++) { verify+=ary[0x0069EBA4-(int)ary+i]>>(i%9);//生成驗證碼,不可逆算法 } VirtualProtect((void*)0x0069EBA4,nLen,oldProtect,&oldProtect);//還原內(nèi)存屬性 //校驗代碼是否還原正確 //正確校驗碼:0x8f if(verify==0x8f) { returntrue; } else { returnfalse; }}4.2.3文件加密File:CPage1.cppMethod:CPage1::OnBnClickedOk()//密碼轉(zhuǎn)換,Cstring->char*unsignedcharkey[4][8];//256位密碼inti=0,j=0,strlen=strPwd.GetLength();for(i=0;i<4;i++){for(j=0;j<8;j++){ if((i*8+j)<strlen){key[i][j]=(unsignedchar)strPwd[(i*8+j)];}else{key[i][j]=0x00; }}}AES.initial(8,key);//AES初始化EncryptFile();//文件加密File:CPage1.cppMethod:CPage1::EncryptFile()finput=fopen(strFileFullPath,"rb");//打開需要加密的文件fseek(finput,0,SEEK_END);longlFileLen=ftell(finput);//獲得文件長度fseek(finput,0,SEEK_SET);longblocknum=lFileLen/16;longleftnum=lFileLen%16;strFileFullPath+=".MYFM";foutput=fopen(strFileFullPath,"wb");//打開加密后的文件unsignedcharinBuff[25],ouBuff[25];unsignedcharctming[4][4],ctme[4][4];for(longi=0;I<blocknum;i++){fread(inBuff,1,16,finput);//每次加密16個字節(jié)for(j=0;j<4;j++){for(k=0;k<4;k++){ctming[j][k]=inBuff[j*4+k];}}AES.Encrypt(ctming,ctme);//加密函數(shù)for(j=0;j<4;j++){for(k=0;k<4;k++){ouBuff[j*4+k]=ctme[j][k];}}fwrite(ouBuff,1,16,foutput);}if(leftnum)//加密分組后剩下的字節(jié){for(j=0;j<16;j++){inBuff[j]=0;}fread(inBuff,1,leftnum,finput);for(j=0;j<4;j++){for(k=0;k<4;k++){ctming[j][k]=inBuff[j*4+k];}}AES.Encrypt(ctming,ctme);//加密函數(shù)for(j=0;j<4;j++){for(k=0;k<4;k++){ouBuff[j*4+k]=ctme[j][k];}}fwrite(ouBuff,1,16,foutput);}4.2.4文件解密File:CPage2.cppMethod:CPage2::OnBnClickedOk()//密碼轉(zhuǎn)換,Cstring->char*unsignedcharkey[4][8];//256位密碼inti=0,j=0,strlen=strPwd.GetLength();for(i=0;i<4;i++){for(j=0;j<8;j++){ if((i*8+j)<strlen){key[i][j]=(unsignedchar)strPwd[(i*8+j)];}else{key[i][j]=0x00; }}}AES.initial(8,key);//AES初始化DecryptFile();//文件解密File:CPage2.cppMethod:CPage2::DecryptFile()Finput=fopen(strFileFullPath,"rb");//打開需要解密的文件fseek(finput,0,SEEK_END);longlFileLen=ftell(finput);//獲取文件長度fseek(finput,0,SEEK_SET);longblocknum=lFileLen/16;longleftnum=lFileLen%16;strFileFullPath=strFileFullPath.Left(strFileFullPath.GetLength()-5);foutput=fopen(strFileFullPath,"wb");//打開解密后的文件unsignedcharinBuff[25],ouBuff[25];unsignedcharctming[4][4],ctme[4][4];for(longI=0;i<blocknum;i++){//解密16個字節(jié)fread(inBuff,1,16,finput);for(j=0;j<4;j++){for(k=0;k<4;k++){ctme[j][k]=inBuff[j*4+k];}}AES.Decrypt(ctming,ctme);//解密操作for(j=0;j<4;j++){for(k=0;k<4;k++){ouBuff[j*4+k]=ctming[j][k];}}fwrite(ouBuff,1,16,foutput);}4.2.5文件校驗File:CPage3.cppMethod:CPage3::OnInitDialog()//讀取右鍵點擊的文件信息LPWSTR*szArglist=NULL;intnArgs=0;szArglist=CommandLineToArgvW(GetCommandLineW(),&nArgs);if(NULL!=szArglist){CStringpath;//獲得文件路徑path=szArglist[1];GetDlgItem(IDC_EDIT_FILENAME)->SetWindowText(path);//獲得校驗碼,并顯示CMD5md5;md5.update(ifstream(path));GetDlgItem(IDC_EDIT_MD5)->SetWindowText(md5.toString().c_str());}LocalFree(szArglist);//取得參數(shù)后,釋放CommandLineToArgvW申請的空間4.2.6文件粉碎File:CPage3.cppMethod:CPage3::Shatter()//讀取文件路徑CStringpath;((CEdit*)GetDlgItem(IDC_EDIT_FILENAME))->GetWindowText(path);//讀取擦寫次數(shù)CStringstrNum=NULL;intnNum=0;((CEdit*)GetDlgItem(IDC_EDIT_NUM))->GetWindowText(strNum);nNum=_ttoi(strNum);//讀取擦寫內(nèi)容intnContent=0;nContent=GetCheckedRadioButton(IDC_RADIO_NULL,IDC_RADIO_RANDOM);FILE*pf=NULL;pf=fopen(path,"r+");//獲得文件大小intnSize=0;fseek(pf,0,SEEK_END);nSize=ftell(pf);fseek(pf,0,SEEK_SET);//擦寫操作charch;inti=0;intj=0;for(i=0;i<nNum;i++){for(j=0;j<nSize;j++){if(nContent==IDC_RADIO_NULL){ch='\0';}else{srand((unsigned)time(NULL));ch=(char)(rand()/256);}fputc(ch,pf);}}結(jié)論本次畢業(yè)設(shè)計,設(shè)計了一款集文件加密、文件解密、文件校驗和文件粉碎功能于一身的軟件,文件管家。功能上滿足一般用戶的日常需要,能夠很好的保護用戶的個人數(shù)據(jù);操作上簡單,方便,大大提高了用戶體驗。并根據(jù)shellcode的編碼原理,對軟件進行了加密,降低了軟件被逆向的風險,從而能夠很好的保護軟件的核心算法。通過本次畢業(yè)設(shè)計,使我深入的理解了AES算法的加密和解密過程,對shellcode的編碼原理有了更深層次的認識。讓我對軟件的設(shè)計過程有了一個更好的熟悉,受益匪淺。參考文獻[1]丁晨驪.文件加密解密算法研究與實現(xiàn)[D].上海交通大學(xué),2009[2]何明星,林昊.AES算法原理及其實現(xiàn)[J].計算機應(yīng)用研究,2002,(12)[3]蔡宇東,沈海斌,嚴曉浪.AES算法的高速實現(xiàn)[J].微電子學(xué)與計算機,2004,(1)[4]卜曉燕,張根耀,郭協(xié)潮.基于AES算法實現(xiàn)對數(shù)據(jù)的加密[J].電子設(shè)計工程,2009,(3)[5]林茂瓊,李敏強,寇紀淞,熊凱.基于AES的數(shù)據(jù)加密方案[J].計算機工程[J],2002,(4)[6]陳尚義.透明文件加解密技術(shù)及其應(yīng)用[J].信息安全與通信保密,2007,(11)[7]王全民,周清,劉宇明,朱二夫.文件透明加密技術(shù)研究[J].計算機技術(shù)與發(fā)展,2010,(3)[8]黃革新.Windows加密文件系統(tǒng)核心技術(shù)分析[J].電腦與信息技術(shù),2005,(4)[9]JianWeng,RobertH.Deng,ShengliLiu,KefeiChen.Chosen-ciphertextsecurebidirectionalproxy re-encryptionschemeswithoutpairingsOriginalResearchArticleInformationSciences,Volume 180,Issue24,15December2010,Pages5077-5089[10]ThomasW.Shinder,DebraLittlejohnShinder,MartinGrasdal.Chapter9-DefendingYourData withtheEncryptingFileSystem.ISAServerandBeyond,2002,Pages533-576[11]AntonioIzquierdoManzanares,JoseM.SierraCamara,JoaquinTorresMarquez.Onthe implementationofsecuritypolicieswithadaptativeencryptionOriginalResearchArticleComputer Communications,Volume29,Issue15,5September2006,Pages2750-2758致謝歲月如歌,光陰似箭,四年的大學(xué)生活即將結(jié)束。經(jīng)歷了找工作的喧囂與坎坷,我深深體會到了寫作論文時的那份寧靜與思考?;厥姿哪甑那髮W(xué)歷程,對那些引導(dǎo)我、幫助我、激勵我的人,我心中充滿了感激。首先要感謝指導(dǎo)老師李麗珍副教授,論文定題到寫作定稿,傾注了李老師大量的心血。在我畢業(yè)設(shè)計期間,深深受益于李老師的關(guān)心、愛護和諄諄教導(dǎo)。她作為老師,點撥迷津,讓人如沐春風;作為長輩,關(guān)懷備至,讓人感念至深。在此謹向李老師表示我最誠摯的敬意和感謝!還要感謝朱凱老師。朱老師在論文的寫作中給予了許多指導(dǎo)與建議,謹在此表示衷心的感謝。同時,我要感謝一直關(guān)心與支持我的同學(xué)和朋友們!四年來,我們朝夕相處,共同進步,感謝你們給予我的所有關(guān)心和幫助。同窗之誼,我將終生難忘!在此要感謝我生活學(xué)習了四年的母?!砉ご髮W(xué),母校給了我一個寬闊的學(xué)習平臺,讓我不斷吸取新知,充實自己。需要特別感謝的是我的父母。父母的養(yǎng)育之恩無以為報,他們是我十多年求學(xué)路上的堅強后盾,在我面臨人生選擇的迷茫之際,為我排憂解難,他們對我無私的愛與照顧是我不斷前進的動力。外文原文1IntroductionThisstandardspecifiestheRijndaelalgorithm,asymmetricblockcipherthatcanprocessdatablocksof128bits,usingcipherkeyswithlengthsof128,192,and256bits.Rijndaelwasdesignedtohandleadditionalblocksizesandkeylengths,howevertheyarenotadoptedinthisstandard.Throughouttheremainderofthisstandard,thealgorithmspecifiedhereinwillbereferredtoas“theAESalgorithm.”Thealgorithmmaybeusedwiththethreedifferentkeylengthsindicatedabove,andthereforethesedifferent“flavors”maybereferredtoas“AES-128”,“AES-192”,and“AES-256”.Thisspecificationincludesthefollowingsections:2Definitionsofterms,acronyms,andalgorithmparameters,symbols,andfunctions;3Notationandconventionsusedinthealgorithmspecification,includingtheorderingandnumberingofbits,bytes,andwords;4Mathematicalpropertiesthatareusefulinunderstandingthealgorithm;Thestandardconcludeswithseveralappendicesthatincludestep-by-stepexamplesforKeyExpansionandtheCipher,examplevectorsfortheCipherandInverseCipher,andalistofreferences.2Definitions2.1GlossaryofTermsandAcronymsThefollowingdefinitionsareusedthroughoutthisstandard:AESAdvancedEncryptionStandardAffineAtransformationconsistingofmultiplicationbyamatrixfollowedbyransformationtheadditionofavector.ArrayAnenumeratedcollectionofidenticalentities(e.g.,anarrayofbytes).BitAbinarydigithavingavalueof0or1.BlockSequenceofbinarybitsthatcomprisetheinput,output,State,andRoundKey.Thelengthofasequenceisthenumberofbitsitcontains.Blocksarealsointerpretedasarraysofbytes.ByteAgroupofeightbitsthatistreatedeitherasasingleentityorasanarrayof8individualbits.CipherSeriesoftransformationsthatconvertsplaintexttociphertextusingtheCipherKey.CipherKeySecret,cryptographickeythatisusedbytheKeyExpansionroutinetogenerateasetofRoundKeys;canbepicturedasarectangulararrayofbytes,havingfourrowsandNkcolumns.CiphertextDataoutputfromtheCipherorinputtotheInverseCipher.InverseCipherSeriesoftransformationsthatconvertsciphertexttoplaintextusingtheCipherKey.KeyExpansionRoutineusedtogenerateaseriesofRoundKeysfromtheCipherKey.PlaintextDatainputtotheCipheroroutputfromtheInverseCipher.RijndaelCryptographicalgorithmspecifiedinthisAdvancedEncryptionStandard(AES).RoundKeyRoundkeysarevaluesderivedfromtheCipherKeyusingtheKeyExpansionroutine;theyareappliedtotheStateintheCipherandInverseCipher.StateIntermediateCipherresultthatcanbepicturedasarectangulararrayofbytes,havingfourrowsandNbcolumns.S-boxNon-linearsubstitutiontableusedinseveralbytesubstitutiontransformationsandintheKeyExpansionroutinetoperformaone-for-onesubstitutionofabytevalue.WordAgroupof32bitsthatistreatedeitherasasingleentityorasanarrayof4bytes.2.2AlgorithmParameters,Symbols,andFunctionsThefollowingalgorithmparameters,symbols,andfunctionsareusedthroughoutthisstandard:AddRoundKey() TransformationintheCipherandInverseCipherinwhichaRoundKeyisaddedtotheStateusinganXORoperation.ThelengthofaRoundKeyequalsthesizeoftheState(i.e.,forNb=4,theRoundKeylengthequals128bits/16bytes).InvMixColumns()TransformationintheInverseCipherthatistheinverseofMixColumns().InvShiftRows()TransformationintheInverseCipherthatistheinverseofShiftRows().InvSubBytes()TransformationintheInverseCipherthatistheinverseofSubBytes().KCipherKey.MixColumns()TransformationintheCipherthattakesallofthecolumnsoftheStateandmixestheirdata(independentlyofoneanother)toproducenewcolumns.NbNumberofcolumns(32-bitwords)comprisingtheState.Forthisstandard,Nb=4.Nk Numberof32-bitwordscomprisingtheCipherKey.Forthisstandard,Nk=4,6,or8.NrNumberofrounds,whichisafunctionofNkandNb(whichisfixed).Forthisstandard,Nr=10,12,or14.Rcon[] Theroundconstantwordarray.RotWord() FunctionusedintheKeyExpansionroutinethattakesafour-bytewordandperformsacyclicpermutation.ShiftRows() TransformationintheCipherthatprocessestheStatebycyclicallyshiftingthelastthreerowsoftheStatebydifferentoffsets.SubBytes()TransformationintheCipherthatprocessestheStateusinganon-linearbytesubstitutiontable(S-box)thatoperatesoneachoftheStatebytesindependently.SubWord() FunctionusedintheKeyExpansionroutinethattakesafour-byteinputwordandappliesanS-boxtoeachofthefourbytestoproduceanoutputword.XORExclusive-ORoperation.3NotationandConventions3.1InputsandOutputsTheinputandoutputfortheAESalgorithmeachconsistofsequencesof128bits(digitswithvaluesof0or1).Thesesequenceswillsometimesbereferredtoasblocksandthenumberofbitstheycontainwillbereferredtoastheirlength.TheCipherKeyfortheAESalgorithmisasequenceof128,192or256bits.Otherinput,outputandCipherKeylengthsarenotpermittedbythisstandard.Thebitswithinsuchsequenceswillbenumberedstartingatzeroandendingatonelessthanthesequencelength(blocklengthorkeylength).Thenumberiattachedtoabitisknownasitsindexandwillbeinoneoftheranges0<i<128,0<i<192or0<i<256dependingontheblocklengthandkeylength(specifiedabove).3.2BytesThebasicunitforprocessingintheAESalgorithmisabyte,asequenceofeightbitstreatedasasingleentity.Theinput,outputandCipherKeybitsequencesdescribedinSec.3.1areprocessedasarraysofbytesthatareformedbydividingthesesequencesintogroupsofeightcontiguousbitstoformarraysofbytes(seeSec.3.3).Foraninput,outputorCipherKeydenotedbya,thebytesintheresultingarraywillbereferencedusingoneofthetwoforms,anora[n],wherenwillbeinoneofthefollowingranges:Keylength=128bits,0n<16.Keylength=192bits,0n<24.Keylength=256bits,0n<32.Blocklength=128bits,0n<16.AllbytevaluesintheAESalgorithmwillbepresentedastheconcatenationofitsindividualbitvalues(0or1)betweenbracesintheorder{b7,b6,b5,b4,b3,b2,b1,b0}.Thesebytesareinterpretedasfinitefieldelementsusingapolynomialrepresentation:Forexample,{01100011}identifiesthespecificfinitefieldelementItisalsoconvenienttodenotebytevaluesusinghexadecimalnotationwitheachoftwogroupsoffourbitsbeingdenotedbyasinglecharacterasinFig.1.Hencetheelement{01100011}canberepresentedas{63},w

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論