基于硬盤序列號和RSA算法的軟件加密系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn) 畢業(yè)設(shè)計(jì)論文

上傳人:小** 文檔編號:58916674 上傳時間:2022-03-01 格式:DOC 頁數(shù):43 大小:316.67KB
收藏 版權(quán)申訴 舉報 下載
基于硬盤序列號和RSA算法的軟件加密系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn) 畢業(yè)設(shè)計(jì)論文_第1頁
第1頁 / 共43頁
基于硬盤序列號和RSA算法的軟件加密系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn) 畢業(yè)設(shè)計(jì)論文_第2頁
第2頁 / 共43頁
基于硬盤序列號和RSA算法的軟件加密系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn) 畢業(yè)設(shè)計(jì)論文_第3頁
第3頁 / 共43頁

下載文檔到電腦,查找使用更方便

16 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《基于硬盤序列號和RSA算法的軟件加密系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn) 畢業(yè)設(shè)計(jì)論文》由會員分享,可在線閱讀,更多相關(guān)《基于硬盤序列號和RSA算法的軟件加密系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn) 畢業(yè)設(shè)計(jì)論文(43頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、 本科畢業(yè)設(shè)計(jì)·論文 基于硬盤序列號和RSA算法的軟件加密系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn) 摘 要 隨著計(jì)算機(jī)軟件業(yè)的飛速發(fā)展和計(jì)算機(jī)的日益普及計(jì)算機(jī)軟件已經(jīng)進(jìn)入社會生活中的各個角落。但是由于計(jì)算機(jī)軟件易于復(fù)制,所以隨之而來的便是盜版軟件的泛濫。這使軟件開發(fā)人員蒙受了巨大的經(jīng)濟(jì)和社會損失,防止軟件盜版最行之有效的方法就是對軟件進(jìn)行有效的加密。 論文首先介紹了軟件加密的發(fā)展現(xiàn)狀和研究它的意義,接著對軟件序列號保護(hù)的相關(guān)技術(shù)分析和當(dāng)前流行的加密算法詳細(xì)研究?;谝陨侠碚摶A(chǔ),將本設(shè)計(jì)的基于硬盤序列號和RSA算法軟件加密系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)劃分為兩個層次:采用動態(tài)鏈接庫文件DiskSerial.DLL導(dǎo)出的Ge

2、tSerialNumber()函數(shù)獲取硬盤的物理序列號,動態(tài)鏈接庫的好處是可以采用多種編程語言來編寫,增強(qiáng)產(chǎn)品的功能,提供二次開發(fā)的平臺,簡化項(xiàng)目管理,節(jié)省磁盤空間和內(nèi)存,有助于資源的共享;注冊機(jī)使用RSA加密算法將硬盤物理序列號加密生成為注冊碼,客戶端將注冊碼進(jìn)行解密運(yùn)算,其結(jié)果與獲取的本地計(jì)算機(jī)硬盤物理序列號對比,驗(yàn)證注冊碼的合法性。加密解密使用非對稱密鑰RSA算法,私鑰和公鑰不同,理論上從公鑰推算出私鑰是不可行的,當(dāng)密鑰長度達(dá)到1024位時,破解難度極大,所以使用RSA算法加密確保了軟件的安全性。 本設(shè)計(jì)因?yàn)槭褂玫男蛄刑柺怯脖P物理序列號,及每臺電腦的序列號是不同的,從而保證了注冊碼的唯

3、一性。經(jīng)過調(diào)試和測試的驗(yàn)證,本設(shè)計(jì)結(jié)構(gòu)簡單,性能可靠,操作方便。本設(shè)計(jì)在軟件保護(hù)行業(yè)有著廣泛的使用價值,如在軟件防盜中,用作注冊碼的生成與驗(yàn)證等。 關(guān)鍵詞:硬盤物理序列號;RSA算法;注冊機(jī);軟件加密 System design and implementation of encryption system based on hard disk serial number and RSA algorithm Student:LI Zhong-jie Teacher:ZHANG Lie-ping Abstract:With t

4、he rapid development of computer software industry, and the increasing popularity of computer software has entered every corner of social life. However, because computer software is easy to replicate, so what comes next is the proliferation of pirated software. This allows software developers suffer

5、ed huge economic and social loss, to prevent software piracy is the most effective way to encrypt the software effectively. First, the paper introduces the current development of software encryption and research its meaning, then the serial number of software related to technical analysis and p

6、rotection of the popular encryption algorithm in detail. Based on the above theory, this design based on the hard disk serial number and the RSA encryption algorithm software, system design and implementation is divided into two levels: the dynamic link library files DiskSerial.DLL exported GetSeria

7、lNumber() function to get the hard drive of the physics serial number, The advantage of the dynamic link library can be written using a variety of programming languages, and enhance product's features, provide second development platform, simplifying project management, saving disk space and memory

8、to help resource sharing; Keygen using RSA algorithm encrypt the hard disk physical serial number of students to become registration key, registration key to decrypt the client will operation, its results for the local computer hard disk physical serial number contrast, validation License legitimacy

9、. Encryption and decryption using RSA asymmetric key algorithm, the private key and public key difference, in theory calculate the private key from the public key is not feasible, when the 1024-bit key length, the crack is extremely difficult, so use the RSA encryption algorithm to ensure the securi

10、ty of the software. The design for using the serial number is hard physical serial number, and serial number of each computer is different, thus ensuring the registration code is unique. After commissioning and testing of the verification, the design is simple, reliable, easy to operate. The de

11、sign of the software protection industry has a wide range of value, such as software security, the registration code for the generation and verification. Keywords:shard disk physical serial number;RSA algorithm;keygen;software encryption 目次 摘要 I Abstract II 1 緒論 1 1.1 問題的提出及研究意義 1 1.2 軟件

12、保護(hù)系統(tǒng)概念 1 1.3 課題研究內(nèi)容及論文的主要工作 2 2 軟件序列號保護(hù)的相關(guān)技術(shù)介紹 3 2.1 序列號保護(hù)機(jī)制 3 2.1.1 注冊碼保持不變 3 2.1.2 注冊碼因輸入信息而異 3 2.1.3 注冊碼因用戶計(jì)算機(jī)而異 4 2.2 注冊機(jī)信息采集技術(shù) 4 2.2.1 網(wǎng)卡的物理地址(MAC)獲取 4 2.2.2 磁盤邏輯序列號獲取 5 2.2.3 磁盤物理序列號獲取 5 2.3 常用的軟件保護(hù)技術(shù)介紹 7 2.3.1 時間限制 7 2.3.2 Key File保護(hù) 9 2.3.3 CD-CHECK 9 2.4 軟件保護(hù)總結(jié) 9 2.5 本章小結(jié) 1

13、0 3 加密算法介紹 11 3.1 DES算法 11 3.1.1 DES算法原理 11 3.1.2 DES算法的應(yīng)用誤區(qū) 11 3.2 MD5算法 11 3.2.1 MD5算法原理 11 3.2.2 MD5算法的應(yīng)用 12 3.3 RSA算法 12 3.3.1 RSA算法原理 12 3.3.2 RSA的安全性 13 3.3.3 RSA的速度 13 3.4 本章小結(jié) 14 4 系統(tǒng)詳細(xì)設(shè)計(jì)及實(shí)現(xiàn) 15 4.1 開發(fā)環(huán)境介紹 15 4.1.1 Visual C++ 6.0 介紹 15 4.1.2 MFC程序開發(fā)流程 16 4.2 大進(jìn)制數(shù)及其運(yùn)算類定義 20

14、 4.2.1 大數(shù)類的詳細(xì)描述 20 4.2.2 大數(shù)類的類定義 21 4.3 注冊機(jī)的設(shè)計(jì)及實(shí)現(xiàn) 22 4.3.1 注冊機(jī)界面設(shè)計(jì) 22 4.3.2 注冊機(jī)算法的詳細(xì)描述 25 4.3.3 算法的實(shí)現(xiàn)代碼 26 4.3.4 完成的注冊機(jī)程序 28 4.4 客戶端的設(shè)計(jì)及實(shí)現(xiàn) 29 4.4.1 客戶端界面設(shè)計(jì) 29 4.4.2 各種接口硬盤介紹 30 4.4.3 客戶端算法詳細(xì)描述 32 4.4.4 完成的客戶端程序 34 4.5 本章小結(jié) 36 5 結(jié)論 37 致謝 38 參考文獻(xiàn) 39 38 桂林理工大學(xué)本科畢業(yè)設(shè)計(jì)·論文

15、1 緒論 1.1 問題的提出及研究意義 計(jì)算機(jī)軟件業(yè)的飛速發(fā)展和計(jì)算機(jī)的日益普及計(jì)算機(jī)軟件已經(jīng)進(jìn)入社會生活中的各個角落。計(jì)算機(jī)軟件是開發(fā)者腦力勞動的成果,具有原創(chuàng)性質(zhì)[1]。計(jì)算機(jī)軟件開發(fā)要求軟件開發(fā)人員擁有豐富的專業(yè)相關(guān)知識,具備優(yōu)秀的邏輯思維和抽象思維能力,了解計(jì)算機(jī)硬件與軟件的最新發(fā)展?fàn)顩r與發(fā)展趨勢,熟練掌握和應(yīng)用編程語言。尤其是開發(fā)具有大規(guī)模商業(yè)應(yīng)用的計(jì)算機(jī)軟件,通常需要專業(yè)分工、流水作業(yè)。必須具有的充足的物質(zhì)條件和良好的技術(shù)儲備。而計(jì)算機(jī)軟件的復(fù)制是對計(jì)算機(jī)軟件的客觀再現(xiàn),不改變軟件內(nèi)容,不影響軟件本身的價值,而把軟件轉(zhuǎn)載于有形物體的行為。由于軟件存在形式的特殊性,它

16、比傳統(tǒng)的作品更容易被復(fù)制,且復(fù)制所需投入少、耗時短、傳播容易,無需借助特殊的裝置。尤其在網(wǎng)絡(luò)環(huán)境下計(jì)算機(jī)軟件的復(fù)制與傳播就更為方便,從而使盜版侵權(quán)成了輕易又且暴利的事情。這使軟件開發(fā)人員蒙受了巨大的經(jīng)濟(jì)和社會損失,防止軟件盜版最行之有效的方法就是對軟件進(jìn)行有效的加密[2]。 隨著軟件的防盜版措施越來越被軟件開發(fā)者所重視,其采用的技術(shù)也變得越來越廣泛和復(fù)雜。軟件的破解技術(shù)與保護(hù)技術(shù)這兩者之間就是矛與盾的關(guān)系,它們是在互相斗爭中發(fā)展進(jìn)化的。這種技術(shù)上的較量歸根到底是一種利益的沖突。軟件開發(fā)者為了維護(hù)自身的商業(yè)利益,不斷地尋找各種有效地技術(shù)來保護(hù)軟件版權(quán),以增加其保護(hù)強(qiáng)度,推遲軟件被破解的

17、時間;而破解者則受盜版所帶來的高額利潤的驅(qū)使,或出于純粹的個人興趣,而不斷制作新的破解工具并針對新出現(xiàn)的保護(hù)方式進(jìn)行跟蹤分析以找到相應(yīng)的破解方法。 從理論上說,幾乎沒有破解不了的保護(hù)。但是如果一種保護(hù)技術(shù)的強(qiáng)大強(qiáng)到足以讓破解者在軟件的生命周期內(nèi)無法將其完全破解,這種保護(hù)技術(shù)就可以說是非常成功的。因此,開發(fā)研制一種安全可靠、難以破解軟件加密系統(tǒng)具有重大的經(jīng)濟(jì)意義和社會意義。 1.2 軟件保護(hù)系統(tǒng)概念 軟件與普通作品不同,天生即具有技術(shù)屬性。軟件本身就是實(shí)現(xiàn)技術(shù)的一段計(jì)算機(jī)可以識別的編碼。因此,在既有功能的基礎(chǔ)上,很容易添加新的功能代碼用于保護(hù)版權(quán)。這也意味著,相對于其他普通

18、作品,在軟件保護(hù)中使用技術(shù)手段的成本最低,效率最高。對于軟件而言,通過對軟件進(jìn)行加密等技術(shù)保護(hù)手段可以有效的防止他人對軟件擅自訪問、復(fù)制、操作、散發(fā)及傳播,同時也便于控制軟件正常的授權(quán)使用以及使用后的監(jiān)督。 目前各國對于軟件的保護(hù)性技術(shù)措施都有比較明確的概念。美國將技術(shù)措施的定義為“任何能夠有效控制進(jìn)入受版權(quán)保護(hù)的作品并能夠有效保護(hù)版權(quán)人權(quán)利的措施。”而歐盟的定義為“設(shè)計(jì)用于阻止侵犯版權(quán)以及與數(shù)據(jù)庫有關(guān)的特殊權(quán)利的設(shè)備、產(chǎn)品或方法。”但是技術(shù)措施事實(shí)上是一個開放的系統(tǒng),隨著技術(shù)的不斷進(jìn)步,不斷地會有新類型的技術(shù)保護(hù)措施的涌現(xiàn)。本文出發(fā)點(diǎn)即是通過硬盤物理序列號用RSA算法生成唯一的注冊

19、碼,從而對軟件進(jìn)行保護(hù)。 軟件權(quán)利人通過對軟件等數(shù)字化形式存在的作品上設(shè)置的能夠?qū)崿F(xiàn)對作品的訪問、復(fù)制、傳播、修改和使用進(jìn)行有效控制的各種技術(shù)手段、設(shè)備、產(chǎn)品或方法,并借此達(dá)到對作品未經(jīng)授權(quán)的訪問、復(fù)制、傳播、修改與使用行為的警示、禁止甚至制裁的目的。這些技術(shù)手段、設(shè)備、產(chǎn)品或方法的實(shí)施階段既包括在出售前與軟件本體打包封裝,亦包括在出售后通過在線升級、認(rèn)證等方式加載。上述的這一類的技術(shù)手段、設(shè)備、產(chǎn)品或方法統(tǒng)稱為軟件保護(hù)技術(shù)[3]。 1.3 課題研究內(nèi)容及論文的主要工作 本課題研究內(nèi)容主要有:MFC編程技術(shù)、軟件保護(hù)技術(shù)概述、動態(tài)鏈接庫文件的生產(chǎn)導(dǎo)入、獲得Ring0級權(quán)限

20、、獲取硬盤物理序列號、定義大整數(shù)及其運(yùn)算法則類、RSA非對稱密鑰加密解密算法、素?cái)?shù)的判定和密鑰對的生成;在了解以上技術(shù)之后,確定了各個模塊的工作原理及作用,最后根據(jù)要實(shí)現(xiàn)的功能要求,繪制流程圖,由流程圖應(yīng)用C++語言編寫程序。 本論文的主要工作如下: 1)了解軟件盜版的嚴(yán)重性,以及軟件防盜的現(xiàn)狀和發(fā)展趨勢。 2)了解軟件產(chǎn)品的特點(diǎn),深入分析軟件易于復(fù)制傳播的原因。 3) 掌握軟件保護(hù)系統(tǒng)概念,熟悉軟件保護(hù)中常用的技術(shù)手段。 4)掌握MFC可視化編程常用的方法,動態(tài)鏈接庫文件的制作和該文件的導(dǎo)入。 5)了解常用的進(jìn)入Ring0級權(quán)限的三種方法:第一種通過中斷陷入技術(shù),第二種通過寫一個

21、中斷VXD(虛擬驅(qū)動設(shè)備)或WDM,最后一種通過WindowsAPI函數(shù)DeviceInControl調(diào)用Smartvsdvxd。掌握動態(tài)鏈接庫導(dǎo)出函數(shù)獲取硬盤物理序列號。 6)掌握大數(shù)類的定義,大數(shù)類中定義了賦值、比較大小、加法、減法、乘法、除法、求模等基本運(yùn)算法則。 7)了解常用的加密算法,掌握RSA非對稱加密算法的原理,隨機(jī)生成密鑰對(e,n)和(d,n)。熟悉序列號的加密和注冊碼的解密。 8)根據(jù)功能需求,畫出程序流程圖,應(yīng)用C++語言編寫應(yīng)用程序。 2 軟件序列號保護(hù)的相關(guān)技術(shù)介紹 2.1 序列號保護(hù)機(jī)制 數(shù)學(xué)算法一項(xiàng)都是密碼加密的核心,但在一般的軟

22、件加密中,它似乎并不太為人們關(guān)心,因?yàn)榇蠖鄶?shù)時候軟件加密本身實(shí)現(xiàn)的都是一種編程的技巧。但近幾年來隨著序列號加密程序的普及,數(shù)學(xué)算法在軟件加密中的比重似乎是越來越大了。所謂序列號保護(hù)機(jī)制就是軟件開發(fā)者根據(jù)用戶提供的一些信息,然后使用數(shù)學(xué)算法生成注冊碼。用戶得到注冊碼后,經(jīng)過逆運(yùn)算得到的結(jié)果跟自己提供的信息對比,從而確定軟件注冊碼的合法性。因?yàn)椴杉挠脩粜畔㈩愋筒煌跃陀辛硕喾N類型的注冊碼。 2.1.1 注冊碼保持不變 注冊碼保持不變就是說不管是哪個用戶在哪個臺電腦上都能注冊,整個軟件的安全性寄托在注冊碼本身的保密上,只要注冊碼泄漏了,所有人都可以注冊該軟件。早期的軟件保護(hù)都采用一

23、串復(fù)雜的字符串作為注冊碼,因?yàn)楫?dāng)時的網(wǎng)絡(luò)并不發(fā)達(dá),加上注冊碼本身難于記憶,所以個人所擁有的注冊碼一般情況下,是不容易被大量用戶非法盜用的。 隨著時間的推移,網(wǎng)絡(luò)逐漸普及,覆蓋面越來越廣,早期軟件保護(hù)防盜的方法面臨前所未有的挑戰(zhàn),只要有一個人把自己一款軟件的合法注冊碼發(fā)布在網(wǎng)上,其他使用該軟件的用戶就能很容易的利用搜索引擎找到此注冊碼,成功的注冊自己的軟件,而無需支付相應(yīng)的費(fèi)用,這給軟件開發(fā)商造成了巨大的損失?,F(xiàn)在已經(jīng)很少有人使用注冊碼保持不變的方法保護(hù)軟件,此方法已經(jīng)慢慢淡出了人們的視線。 2.1.2 注冊碼因輸入信息而異 這是傳統(tǒng)的注冊碼保護(hù)方法,根據(jù)用戶輸入的不同信息

24、(如用戶名)產(chǎn)生注冊碼,這種方法產(chǎn)生的注冊碼和用戶的信息存在簡單的對應(yīng)機(jī)制,安全性極差,只要“用戶名”和“注冊碼”泄漏就可以無限制地在任何計(jì)算機(jī)上注冊使用。網(wǎng)絡(luò)上大量的“注冊用戶”和“注冊碼”使軟件的保護(hù)形同虛設(shè)[4]。 注冊碼保持不變的方法失利之后,軟件保護(hù)行業(yè)亟需一種有效地保護(hù)方法,于是在原來的方法上改進(jìn)為使用注冊時輸入的信息和注冊碼對應(yīng)的方式保護(hù)軟件,防止盜用,因?yàn)樯勺源a時時用戶輸入的用戶名只有用戶自己知道,因此,就算是本軟的某個注冊碼被別人知道了,但是不知道與這個注冊碼對應(yīng)的用戶名,同樣還是不能注冊成功。所以整個軟件的安全全部寄托在了用戶對自己信息的保密程度,只要某個用戶

25、把自己的注冊碼和用戶名公開,或是黑客通過木馬獲取到了相關(guān)信息,那么其他人就可以用這些信息成功的注冊該軟件。 2.1.3 注冊碼因用戶計(jì)算機(jī)而異 根據(jù)用戶計(jì)算機(jī)各種軟硬件信息:如CPU ID、分區(qū)卷標(biāo)、硬盤大小、硬盤物理序列號、網(wǎng)卡號等等。通過這些信息可以將任意兩臺機(jī)器區(qū)分出來,從而可以生成一段唯一的序列號。這些信息中有的是不可取的,例如分區(qū)卷標(biāo)這種不穩(wěn)定信息,因其僅與軟件系統(tǒng)有關(guān)。而有一些是無法得到的,例如當(dāng)機(jī)器中沒有網(wǎng)卡時或早于Pentium III型號的CPU,網(wǎng)卡號和CPU ID就得不到了[5]。 網(wǎng)絡(luò)的普及,因一個注冊碼泄漏而可以無限制的注冊該軟件的問題越發(fā)突出,

26、軟件開發(fā)商為了能保護(hù)自己的合法權(quán)益,開發(fā)出了一套新的軟件保護(hù)方法,這也是現(xiàn)階段最主要的保護(hù)方式,因計(jì)算機(jī)不同而生成不同的注冊碼。這種注冊碼一般都是與本機(jī)的相關(guān)的具有唯一性的一種或多種物理信息,這種物理信息是出廠時就確定了的,一般是固化在了計(jì)算機(jī)內(nèi)部,不能修改,因此生成的注冊碼即使是發(fā)布在了網(wǎng)上,別的人還是無法使用該注冊碼注冊自己的軟件,因?yàn)樽约旱挠?jì)算機(jī)硬件的相關(guān)信息和本注冊碼不相關(guān)。有了這種全新的軟件保護(hù)方式,軟件開發(fā)商就能在網(wǎng)絡(luò)環(huán)境中很容易的保護(hù)自己的利益,避免軟件被非法盜版。 2.2 注冊機(jī)信息采集技術(shù) 注冊機(jī)信息采集技術(shù)是指利用計(jì)算機(jī)軟件技術(shù),針對計(jì)算機(jī)相關(guān)軟硬件信息進(jìn)行采集

27、保存,從而為各種信息服務(wù)系統(tǒng)提供數(shù)據(jù)輸入的整個過程。 硬件信息包括CPU ID、網(wǎng)卡物理地址(MAC)、硬盤的相關(guān)物理信息例如硬盤物理序列號等等。這些硬件物理信息有些可以通過windows提供的API函數(shù)直接獲取,有些需要自己編寫相關(guān)的函數(shù),而且在windows下,必須編寫一個驅(qū)動程序或通過一定的技術(shù)手段獲取,例如,硬盤信息的獲取操作,需要運(yùn)行在Ring 0級別,而正常情況,windows的應(yīng)用程序是運(yùn)行在Ring 3級的,因此在獲取硬盤物理信息前,必須通過一定的技術(shù)方法進(jìn)入windows的Ring 0級。 2.2.1 網(wǎng)卡的物理地址(MAC)獲取 MAC(Media A

28、ccess Control, 介質(zhì)訪問控制)MAC地址是燒錄在Network Interface Card(網(wǎng)卡,NIC)里的。MAC地址,也叫硬件地址,是由48比特長(6字節(jié)),16進(jìn)制的數(shù)字組成。0-23位叫做組織唯一標(biāo)志符(organizationally unique),是識別LAN(局域網(wǎng))節(jié)點(diǎn)的標(biāo)識,24-47位是由廠家自己分配,其中第40位是組播地址標(biāo)志位。網(wǎng)卡的物理地址通常是由網(wǎng)卡生產(chǎn)廠家燒入網(wǎng)卡的EPROM(一種閃存芯片,通??梢酝ㄟ^程序擦寫),它存儲的是傳輸數(shù)據(jù)時真正賴以標(biāo)識發(fā)出數(shù)據(jù)的電腦和接收數(shù)據(jù)的主機(jī)的地址。也就是說,在網(wǎng)絡(luò)底層的物理傳輸過程中,是通過物理地址來識別主機(jī)

29、的,它一般也是全球唯一的。比如,著名的以太網(wǎng)卡,其物理地址是48bit(比特位)的整數(shù),如:44-45-53-54-00-00,以機(jī)器可讀的方式存入主機(jī)接口中。以太網(wǎng)地址管理機(jī)構(gòu)(除了管這個外還管別的)(IEEE)(IEEE:電氣和電子工程師協(xié)會)將以太網(wǎng)地址,也就是48比特的不同組合,分為若干獨(dú)立的連續(xù)地址組,生產(chǎn)以太網(wǎng)網(wǎng)卡的廠家就購買其中一組,具體生產(chǎn)時,逐個將唯一地址賦予以太網(wǎng)卡。形象的說,MAC地址就如同我們身份證上的身份證號碼,具有全球唯一性。 眾所周知,一個網(wǎng)卡對應(yīng)唯一MAC地址,對一些應(yīng)用程序來說,獲取網(wǎng)卡MAC地址有時是必要的,使用VC提供的NetBIOS網(wǎng)絡(luò)編程接口

30、可以方便獲取網(wǎng)卡MAC地址。NetBIOS中所有的函數(shù)聲明、常數(shù)等等均是在頭文件nb30.h內(nèi)定義的,nb30.h中一些類型在wtypes.h中定義,另外,若想使用NetBIOS,須連接的庫是netapi.dll。 2.2.2 磁盤邏輯序列號獲取 硬盤的磁盤邏輯序列號的獲取很簡單,可直接調(diào)用windows的API函數(shù)GetVolumeInformation()獲取硬盤的邏輯序列號[6]。該函數(shù)如下所示: GetVolumeInformation(  lpRootPathName: PChar;        {磁盤驅(qū)動器代碼字符串}  lpVolumeNameBuffer:

31、PChar;      {磁盤驅(qū)動器卷標(biāo)名稱}  nVolumeNameSize: DWORD;       {磁盤驅(qū)動器卷標(biāo)名稱長度}  lpVolumeSerialNumber: PDWORD;    {磁盤驅(qū)動器卷標(biāo)序列號}  var lpMaximumComponentLength: DWORD; {系統(tǒng)允許的最大文件名長度}  var lpFileSystemFlags: DWORD;    {文件系統(tǒng)標(biāo)識}  lpFileSystemNameBuffer: PChar;    {文件操作系統(tǒng)名稱}  nFileSystemNameSize: DWORD      {文件

32、操作系統(tǒng)名稱長度} ): BOOL; 采用注冊碼的保護(hù)方式,最好是一機(jī)一碼,即注冊碼與機(jī)器特征相關(guān),這樣一臺機(jī)器上的注冊碼就無法在另外一臺機(jī)器上使用,可以防止有人散播注冊碼,然而硬盤邏輯序列號用相關(guān)工具可以修改其值,所以使用邏輯序列號不安全。 2.2.3 磁盤物理序列號獲取 硬盤的序列號是廠家設(shè)定的,且只能用I/O指令讀取,所以,這在以前的DOS時根本不是什么問題,方法非常簡單,如下面的代碼所示: static int WaitIde(){ int al; while ((al=i

33、np(0x1F7))>=0x80); return al; } static void ReadIDE(){ int al; int i; WORD pw[256]; WaitId(); outp(0x1F6,0xA0); al = WaitIde(); if((al

34、&0x50)!=0x50) return; outp(0x1F6,0xA0); outp(0x1F7,0xEC); al = WaitIde(); if((al&0x58)!=0x58) return; for(i=0;i<256;i++){ pw[i] = inpw(0x1F0); } }

35、至此,關(guān)于IDE硬盤的信息已經(jīng)在pw數(shù)組中了,需要注意的是該數(shù)組是一個WORD類型,硬盤的序列號存放于pw[10]開始的10個WORD中,使用時需要將每個WORD的高低字節(jié)顛倒一下。真正有點(diǎn)麻煩的是在Windows 95/98下,I/O指令作為特權(quán)指令在應(yīng)用程序級別,即Ring3是不可使用的,所以上面的代碼在執(zhí)行到WaitIde()時會陷到死循環(huán)中,原因就是IN 0x1F7總是返回0xFF容易想到的解決辦法是寫一個VxD,因?yàn)閂xD運(yùn)行Ring 0級別上,即最高特權(quán)級上,所以所有的指令都是可用的,硬盤物理序列號的獲取需要使用特權(quán)指令,要進(jìn)入Ring0特權(quán)級常用的還有兩種方法:1)中斷陷入技術(shù);

36、2)通過WindowsAPI函數(shù)DeviceInControl調(diào)用Smartvsdvxd。其中第一種方法相對簡單實(shí)用,但不能取得NT下的Ring0級,因?yàn)镹T下得不到中斷向量表,本文只介紹第一種方法的實(shí)現(xiàn)機(jī)制。 計(jì)算機(jī)操作系統(tǒng)都有一個中斷描述表(IDT),該表有IDTR寄存器指向。矢量號作為IDT表的索引,從IDT表中獲取一個8字節(jié)的門描述符。在門中包含48位的全指針及占用了16位的屬性。48位的全指針包含32位的偏移量及16位的選擇子。這里的偏移量分為兩個部分存放。全指針的選擇子部分存放在m+2及m+3字節(jié),偏移量的低16位存放在m及m+1字節(jié),高16位存放在m+6及m+7字節(jié)。在

37、門描述符中,屬性位存放在m+4及m+5字節(jié)。 P為存在位,P=1表示門有效,P=0表示門無效,使用無效門將引起異常。DPL為描述符特權(quán)級,定義與門相聯(lián)系的特權(quán)級。門的DPL只在INTn及INTO時進(jìn)行檢查,以避免應(yīng)用程序執(zhí)行INTn時,使用了各種設(shè)備在中斷表中使用的矢量號。對于所有其它的異?;蛑袛?,忽略門DPL。DT為DType位,用于區(qū)分儲存段(DT=1)及非儲存段(及系統(tǒng)段或門,DT=0)。我們現(xiàn)在討論的是門描述符,故此處有DT=0。Type為四位類型字段,用于定義門的類型:5為任務(wù)門;6為286中斷門;7為286陷阱門;14為386中斷門;15為386陷阱門。我們利用重新定義門

38、描述符的偏移量將自己的程序放入中斷中,通過執(zhí)行中斷從而得到Ring0級的權(quán)限來讀到硬盤序列號[7]。 2.3 常用的軟件保護(hù)技術(shù)介紹 2.3.1 時間限制 2.3.1.1 定時器 有些程序的試用版每次運(yùn)行都有時間限制,例如運(yùn)行10分鐘或20分鐘就停止工作,必須重新運(yùn)行該程序才能正常工作。這些程序里面自然有個定時器來統(tǒng)計(jì)程序運(yùn)行的時間。   1)使用Settimer() 常用的計(jì)數(shù)器是函數(shù)Settimer(),調(diào)用這個函數(shù)創(chuàng)建的定時器可以發(fā)出消息VM_TIMER,或者在定時期滿時調(diào)用一個回調(diào)函數(shù)。使用這個函數(shù)會使時間延時,精度不高。   2)使用timeSetEv

39、ent() 給Windows驅(qū)動程序最精確的周期性通知是由Windows的多媒體服務(wù)timeSetEvent()提供的。它的時間可以精確到1毫秒。   3)使用VXD   可以使用VMM的Set_Global_time_Out()服務(wù)來迫使回調(diào)函數(shù)的幾個毫秒再執(zhí)行,這就創(chuàng)造了一個“只有一次”的定時器。VXD可以在回調(diào)中再次調(diào)用Set_Global_time_Out()來開始下一個定時器,這樣提供了一個連續(xù)運(yùn)行的定時器了。 4)其它   GetTickCount():精度不高;timeGetTime():可以以毫秒級返回windows開始后的時間。 2.3.1.2 時

40、間限制   一般這類保護(hù)的軟件都有時間上的限制,如試用30天等,當(dāng)過了共享軟件的試用期后,就不予運(yùn)行,只有向軟件作者付費(fèi)注冊之后才能得到一個無時間限制的注冊版本。這種類型程序很多,讓你有10天、20天、30天等,它們在安裝時,在你的系統(tǒng)某處做上時間標(biāo)記,每次運(yùn)行時用當(dāng)前系統(tǒng)時間和安裝時的時間比較,判斷你還否能使用。如最典型的30天限制的一種情況:   mov ecx,1E ; 把1E (30天 十進(jìn)制) 放入 ecx   mov eax,[esp+10] ; 把用過天數(shù)放到eax   cmp eax,ecx ; 在此比較 如碰到這種情況,只需把mov eax,[esp+10]改成mo

41、v eax,1。   要記住當(dāng)前年份、月份的十六進(jìn)制的一些表示方法,如:2000年的十六進(jìn)制是07D0,然后用W32DASM反匯編你的程序,用查找字符串的方法找D007(在機(jī)器碼中位置顛倒了一下)或其它類似時間的數(shù)字,有可能會找到有價值的線索。你別小看這種方法,對那些沒怎么防范的程序,此招很有效。 如:一程序限定在2000年使用,可能有如下一代碼::00037805 817C2404D0070000 cmp dword ptr [esp+04], 000007D0 比較是否在2000年。 2.3.1.3與時間相關(guān)函數(shù) 1)GetSystemTime 得當(dāng)前系統(tǒng)時間   在一個

42、SYSTEMTIME中載入當(dāng)前系統(tǒng)時間,這個時間采用的是“協(xié)同世界時間”(即UTC,也叫做GMT)格式。 VOID GetSystemTime( LPSYSTEMTIME lpSystemTime ); // 隨同當(dāng)前時間載入的結(jié)構(gòu)。 2)GetLocalTime 得當(dāng)前本地時間 VOID GetLocalTime( LPSYSTEMTIME lpSystemTime ); // 用于裝載本地時間的結(jié)構(gòu)。 3)SystemTimeToFileTime 根據(jù)一個FILETIME結(jié)構(gòu)內(nèi)容,載入一個SYSTEMTIME BOOL SystemTim

43、eToFileTime(CONST SYSTEMTIME * lpst,LPFILETIME lpft); // 包含了系統(tǒng)時間信息的一個結(jié)構(gòu)。 // 用于裝載文件時間的一個結(jié)構(gòu)。 4)SetTimer 創(chuàng)建一定時器,在指定時間內(nèi)暫停 UINT SetTimer( HWND hwnd,UINT idtimer,UINT uTimeout,TIMERPROC tmprc); // 時間信息句柄。 // 定時器ID 標(biāo)識符。 // 暫停時間。 // 處理定時過程的程序入口地址。 一般這類保護(hù)的軟件都有時間上的限制,如試用30天等,當(dāng)過了共享軟件的試用期后,

44、就不予運(yùn)行,只有向軟件作者付費(fèi)注冊之后才能得到一個有(或無)時間限制的注冊版本。使用時間限制技術(shù)時,不要依賴于GetLocalTime()、GetSystemTime()這樣眾所周知的函數(shù)來獲取系統(tǒng)時間,可以通過讀取關(guān)鍵的系統(tǒng)文件的修改時間來得到系統(tǒng)時間的信息。 2.3.2 Key File保護(hù) Key File(注冊文件)是一種利用文件來注冊軟件的保護(hù)方式。Key File一般是一個小文件,可以是純文本文件,也可以是包含不可顯示字符的二進(jìn)制文件,其內(nèi)容是一些加密過或未加密的數(shù)據(jù),其中可能有用戶名、注冊碼等信息。文件格式則由軟件作者自己定義。采用keyfile的保護(hù)方式時,key

45、file的尺寸不能太小,可將其結(jié)構(gòu)設(shè)計(jì)得比較復(fù)雜,在程序中不同的地方對keyfile的不同部分進(jìn)行復(fù)雜的運(yùn)算和檢查。試用版軟件沒有注冊文件,當(dāng)用戶向作者付費(fèi)注冊之后,會收到作者寄來的注冊文件,其中可能包含用戶的個人信息。用戶只要將該文件放入指定的目錄,就可以讓軟件成為正式版。該文件一般是放在軟件的安裝目錄中或系統(tǒng)目錄下。軟件每次啟動時,從該文件中讀取數(shù)據(jù),然后利用某種算法進(jìn)行處理,根據(jù)處理的結(jié)果判斷是否為正確的注冊文件,如果正確則以注冊版模式來運(yùn)行[8]。 2.3.3 CD-CHECK 簡單也最常見的光盤保護(hù)就是程序在啟動時判斷光驅(qū)中的光盤上是否存在特定的文件,如果不存在則認(rèn)為用戶

46、沒有正版光盤,拒絕運(yùn)行。在程序運(yùn)行的過程當(dāng)中一般不再檢查光盤的存在與否。Windows下的具體實(shí)現(xiàn)一般是這樣的:先用GetLogicalDriveStrings()或GetLogicalDrives()得到系統(tǒng)中安裝的所有驅(qū)動器的列表,然后再用GetDriveType()檢查每一個驅(qū)動器,如果是光驅(qū)則用CreateFileA()或FindFirstFileA()等函數(shù)檢查特定的文件存在與否,并可能進(jìn)一步地檢查文件的屬性、大小、內(nèi)容等。這種光盤檢查是比較容易被破解的,解密者只要利用上述函數(shù)設(shè)斷點(diǎn)找到程序啟動時檢查光驅(qū)的地方,修改判斷指令就可以跳過光盤檢查[9]。 2.4 軟件保護(hù)總結(jié)

47、 本節(jié)將給出關(guān)于軟件保護(hù)的一般性建議,這些都是無數(shù)人經(jīng)驗(yàn)的總結(jié)。程序員在設(shè)計(jì)自己的保護(hù)方式時最好能夠遵守這里給出的準(zhǔn)則,這樣會提高軟件的保護(hù)強(qiáng)度。 1)軟件最終發(fā)行之前一定要將可執(zhí)行程序進(jìn)行加殼/壓縮,使得解密者無法直接修改程序。如果時間允許并且有相應(yīng)的技術(shù)能力,最好是設(shè)計(jì)自己的加殼/壓縮方法。如果采用現(xiàn)成的加殼工具,最好不要選擇流行的工具,因?yàn)檫@些工具已被廣泛深入地加以研究,有了通用的脫殼/解壓辦法。另外,最好采用兩種以上的不同的工具來對程序進(jìn)行加殼/壓縮,并盡可能地利用這些工具提供的反跟蹤特性。 2)增加對軟件自身的完整性檢查。這包括對磁盤文件和內(nèi)存映像的檢查,以防止有人未經(jīng)允

48、許修改程序以達(dá)到破解的目的。DLL和EXE之間可以互相檢查完整性。 3)所有與軟件保護(hù)相關(guān)的字符串都不能以明文形式直接存放在可執(zhí)行文件中,這些字符串最好是動態(tài)生成。盡可能少地給用戶提示信息,因?yàn)檫@些蛛絲馬跡都可能導(dǎo)致解密者直接深入到保護(hù)的核心。比如,當(dāng)檢測到破解企圖之后,不要立即給用戶提示信息,而是在系統(tǒng)的某個地方做一個記號,隨機(jī)地過一段時間后使軟件停止工作,或者裝作正常工作但實(shí)際上卻在所處理的數(shù)據(jù)中加入了一些垃圾。 4)將注冊碼、安裝時間記錄在多個不同的地方。檢查注冊信息和時間的代碼越分散越好。不要調(diào)用同一個函數(shù)或判斷同一個全局標(biāo)志,因?yàn)檫@樣做的話只要修改了一個地方則全部都被破解了。在檢

49、查注冊信息的時候插入大量無用的運(yùn)算以誤導(dǎo)解密者,并在檢查出錯誤的注冊信息之后加入延時。 5)如果試用版與正式版是分開的兩個版本,且試用版的軟件沒有某項(xiàng)功能,則不要僅僅使相關(guān)的菜單變灰,而是徹底刪除相關(guān)的代碼,使得編譯后的程序中根本沒有相關(guān)的功能代碼。 2.5 本章小結(jié) 本章主要介紹了序列號保護(hù)機(jī)制,注冊機(jī)信息采集技術(shù),其中詳細(xì)介紹了硬盤物理序列號的獲取和一些其它的軟件保護(hù)技術(shù),通過對比分析,每種算法都有自己的優(yōu)勢,具體使用哪種算法要根據(jù)問題的需求,最終本設(shè)計(jì)選用硬盤物理序列生成注冊碼的方法。采用硬盤物理序列號生成注冊碼的保護(hù)方式,最好的優(yōu)勢是一機(jī)一碼,即注冊碼與機(jī)器特征相關(guān),這樣

50、一臺機(jī)器上的注冊碼就無法在另外一臺機(jī)器上使用,能有效地防止軟件盜版的問題。 3 加密算法介紹 3.1 DES算法 3.1.1 DES算法原理 數(shù)據(jù)加密算法(Data Encryption Algorithm,DEA)的數(shù)據(jù)加密標(biāo)準(zhǔn)(Data Encryption Standard,DES)是規(guī)范的描述,它出自IBM的研究工作,并在 1977 年被美國政府正式采納。它是一種對稱加密算法,很可能是使用最廣泛的密鑰系統(tǒng),特別是在保護(hù)金融數(shù)據(jù)的安全中,最初開發(fā)的 DES 是嵌入硬件中的。通常自動取款機(jī)(Automated Teller Machine,AT

51、M)都使用 DES。 DES 使用一個56位的密鑰以及附加的8位奇偶校驗(yàn)位,產(chǎn)生最大64位的分組大小。這是一個迭代的分組密碼,使用稱為Feistel的技術(shù),其中將加密的文本塊分成兩半。使用子密鑰對其中一半應(yīng)用循環(huán)功能,然后將輸出與另一半進(jìn)行“異或”運(yùn)算;接著交換這兩半,這一過程會繼續(xù)下去,但最后一個循環(huán)不交換。DES 使用 16 個循環(huán),使用異或,置換,代換,移位操作四種基本運(yùn)算。 3.1.2 DES算法的應(yīng)用誤區(qū) DES算法加密與解密均工作中。唯一需要避免的是:在應(yīng)用中,避開使用Key的第8,16......64位作為有效數(shù)據(jù)位,從而便避開DES算法在應(yīng)用中的誤區(qū)。避開

52、DES算法應(yīng)用誤區(qū)的具體操作在DES密鑰Key的使用、管理及密鑰更換的過程中,應(yīng)絕對避開DES 算法的應(yīng)用誤區(qū),即:絕對不能把Key的第8,16,24......64位作為有效數(shù)據(jù)位,來對Key進(jìn)行管理。這一點(diǎn),特別推薦給金融銀行界及非金融業(yè)界的領(lǐng)導(dǎo)及決策者們,尤其是負(fù)責(zé)管理密鑰的人,要對此點(diǎn)予以高度重視。有的銀行金融交易網(wǎng)絡(luò),利用定期更換DES密鑰Key的辦法來進(jìn)一步提高系統(tǒng)的安全性和可靠性,如果忽略了上述應(yīng)用誤區(qū),那么,更換新密鑰將是徒勞的,對金融交易網(wǎng)絡(luò)的安全運(yùn)行將是十分危險的,所以更換密鑰一定要保證新Key與舊Key真正的不同,即除了第8,16,24,...64位外其它位數(shù)據(jù)發(fā)生了

53、變化,請務(wù)必對此保持高度重視[10]! 3.2 MD5算法 3.2.1 MD5算法原理 MD5的典型應(yīng)用是對一段信息(Message)產(chǎn)生信息摘要(Message-Digest),以防止被篡改。大家都知道,地球上任何人都有自己獨(dú)一無二的指紋,這常常成為公安機(jī)關(guān)鑒別罪犯身份最值得信賴的方法;與之類似,MD5就可以為任何文件(不管其大小、格式、數(shù)量)產(chǎn)生一個同樣獨(dú)一無二的“數(shù)字指紋”,如果任何人對文件做了任何改動,其MD5值也就是對應(yīng)的“數(shù)字指紋”都會發(fā)生變化。 我們常常在某些軟件下載站點(diǎn)的某軟件信息中看到其MD5值,它的作用就在于我們可以在下載該軟件后,對下載回來的文件

54、用專門的軟件(如Windows MD5 Check等)做一次MD 5校驗(yàn),以確保我們獲得的文件與該站點(diǎn)提供的文件為同一文件。利用MD5算法來進(jìn)行文件校驗(yàn)的方案被大量應(yīng)用到軟件下載站、論壇數(shù)據(jù)庫、系統(tǒng)文件安全等方面?! ? 3.2.2 MD5算法的應(yīng)用 MD5的典型應(yīng)用是對一段Message(字節(jié)串)產(chǎn)生fingerprint(指紋),以防止被“篡改”。舉個例子,你將一段話寫在一個叫 readme.txt文件中,并對這個readme.txt產(chǎn)生一個MD5的值并記錄在案,然后你可以傳播這個文件給別人,別人如果修改了文件中的任何內(nèi)容,你對這個文件重新計(jì)算MD5時就會發(fā)現(xiàn)(兩個MD5值不相同

55、)。如果再有一個第三方的認(rèn)證機(jī)構(gòu),用MD5還可以防止文件作者的“抵賴”,這就是所謂的數(shù)字簽名應(yīng)用。 MD5還廣泛用于操作系統(tǒng)的登陸認(rèn)證上,如Unix、各類BSD系統(tǒng)登錄密碼、數(shù)字簽名等諸多方。如在UNIX系統(tǒng)中用戶的密碼是以MD5(或其它類似的算法)經(jīng)Hash運(yùn)算后存儲在文件系統(tǒng)中。當(dāng)用戶登錄的時候,系統(tǒng)把用戶輸入的密碼進(jìn)行MD5 Hash運(yùn)算,然后再去和保存在文件系統(tǒng)中的MD5值進(jìn)行比較,進(jìn)而確定輸入的密碼是否正確。通過這樣的步驟,系統(tǒng)在并不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統(tǒng)的合法性。這可以避免用戶的密碼被具有系統(tǒng)管理員權(quán)限的用戶知道。MD5將任意長度的“字節(jié)串”映射

56、為一個128bit的大整數(shù),并且是通過該128bit反推原始字符串是困難的,換句話說就是,即使你看到源程序和算法描述,也無法將一個MD5的值變換回原始的字符串,從數(shù)學(xué)原理上說,是因?yàn)樵嫉淖址袩o窮多個,這有點(diǎn)象不存在反函數(shù)的數(shù)學(xué)函數(shù)。所以,要遇到了md5密碼的問題,比較好的辦法是:你可以用這個系統(tǒng)中的md5()函數(shù)重新設(shè)一個密碼,如admin,把生成的一串密碼的Hash值覆蓋原來Hash值就行了[11]。 3.3 RSA算法 3.3.1 RSA算法原理 密鑰對的產(chǎn)生:選擇兩個大素?cái)?shù)p和q 計(jì)算:    n=p*q 然后隨機(jī)選擇加密密鑰e,要求e和(p

57、-1)*(q-1)互質(zhì)。最后,利用Euclid 算法計(jì)算解密密鑰d,滿足:    e*d=1(mod(p-1)*(q-1)) 其中n和d也要互質(zhì)。數(shù)e和n是公鑰,d是私鑰。兩個素?cái)?shù)p和q不再需要,應(yīng)該丟棄,不要讓任何人知道。 加密信息 m(二進(jìn)制表示)時,首先把m分成等長數(shù)據(jù)塊 m1 ,m2,..., mi ,塊長s,其中 2^s <= n, s 盡可能的大。對應(yīng)的密文是:    ci=mi^e( mod n) (a) 解密時作如下計(jì)算:    mi=ci^d( mod n) (b) RSA可用于數(shù)字簽名,

58、方案是用(a)式簽名,(b)式驗(yàn)證。具體操作時考慮到安全性和m信息量較大等因素,一般是先作HASH運(yùn)算[12]。 3.3.2 RSA的安全性 RSA的安全性依賴于大數(shù)的因子分解,但并沒有從理論上證明破譯RSA的難度與大數(shù)分解難度等價。即RSA的重大缺陷是無法從理論上把握它的保密性能如何,而且密碼學(xué)界多數(shù)人士傾向于因子分解不是NPC問題。RSA的缺點(diǎn)主要有:1)產(chǎn)生密鑰很麻煩,受到素?cái)?shù)產(chǎn)生技術(shù)的限制,因而難以做到一次一密。2)分組長度太大,為保證安全性,n 至少也要 600 bits以上,使運(yùn)算代價很高,尤其是速度較慢,較對稱密碼算法慢幾個數(shù)量級;且隨著大數(shù)分解技術(shù)的發(fā)展,這個長度還

59、在增加,不利于數(shù)據(jù)格式的標(biāo)準(zhǔn)化。目前,SET(Secure Electronic Transaction)協(xié)議中要求CA采用2048比特長的密鑰,其他實(shí)體使用1024比特的密鑰。   這種算法1978年就出現(xiàn)了,它是第一個既能用于數(shù)據(jù)加密也能用于數(shù)字簽名的算法。它易于理解和操作,也很流行。算法的名字以發(fā)明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。但RSA的安全性一直未能得到理論上的證明。RSA的安全性依賴于大數(shù)分解。公鑰和私鑰都是兩個大素?cái)?shù)( 大于 100個十進(jìn)制位)的函數(shù)。據(jù)猜測,從一個密鑰和密文推斷出明文的難度等同于分解兩個大素?cái)?shù)的積。

60、 3.3.3 RSA的速度 由于進(jìn)行的都是大數(shù)計(jì)算,使得RSA最快的情況也比DES慢上100倍,無論是軟件還是硬件實(shí)現(xiàn)。速度一直是RSA的缺陷。一般來說只用于少量數(shù)據(jù)加密。RSA的選擇密文攻擊。RSA在選擇密文攻擊面前很脆弱。一般攻擊者是將某一信息作一下偽裝(Blind),讓擁有私鑰的實(shí)體簽署。然后,經(jīng)過計(jì)算就可得到它所想要的信息。實(shí)際上,攻擊利用的都是同一個弱點(diǎn),即存在這樣一個事實(shí):乘冪保留了輸入的乘法結(jié): ( XM )^d = X^d *M^d mod n   前面已經(jīng)提到,這個固有的問題來自于公鑰密碼系統(tǒng)的最有用的特征--每個人都能使用公鑰。但從算法上無法解決

61、這一問題,主要措施有兩條:一條是采用好的公鑰協(xié)議,保證工作過程中實(shí)體不對其他實(shí)體任意產(chǎn)生的信息解密,不對自己一無所知的信息簽名;另一條是決不對陌生人送來的隨機(jī)文檔簽名,簽名時首先使用One-Way Hash Function對文檔作HASH處理,或同時使用不同的簽名算法。在中提到了幾種不同類型的攻擊方法。 3.4 本章小結(jié) 本章詳細(xì)介紹了當(dāng)前比較流行的幾種加密算法,使我們對加密解密有了更深入的了解,從中我們可以看出各種加密算法的安全性,速度,和適用的條件,以便針對不同的問題使用不同的加密算法。那我們在實(shí)際使用的過程中究竟該使用哪一種比較好呢? 我們應(yīng)該根據(jù)自己的使用特點(diǎn)來

62、確定,由于非對稱加密算法的運(yùn)行速度比對稱加密算法的速度慢很多,當(dāng)我們需要加密大量的數(shù)據(jù)時,建議采用對稱加密算法,提高加解密速度。對稱加密算法不能實(shí)現(xiàn)簽名,因此簽名只能非對稱算法。由于對稱加密算法的密鑰管理是一個復(fù)雜的過程,密鑰的管理直接決定著他的安全性,因此當(dāng)數(shù)據(jù)量很小時,我們可以考慮采用非對稱加密算法。在實(shí)際的操作過程中,我們通常采用的方式是:采用非對稱加密算法管理對稱算法的密鑰,然后用對稱加密算法加密數(shù)據(jù),這樣我們就集成了兩類加密算法的優(yōu)點(diǎn),既實(shí)現(xiàn)了加密速度快的優(yōu)點(diǎn),又實(shí)現(xiàn)了安全方便管理密鑰的優(yōu)點(diǎn)。 如果在選定了加密算法后,那采用多少位的密鑰呢?一般來說,密鑰越長,運(yùn)行的速度就越

63、慢,應(yīng)該根據(jù)的我們實(shí)際需要的安全級別來選擇,一般來說,RSA建議采用1024位的數(shù)字,如果有更高的保密要求,可采用2048位數(shù)字。 通過比較分析,本設(shè)計(jì)決定使用RSA加密算法加密生成注冊碼,雖然RSA算法沒有DES算法速度快,但是RSA加密解密使用不同的非對稱密鑰這是它的優(yōu)勢。本設(shè)計(jì)注冊碼的生成是在注冊機(jī)上完成的,注冊碼的驗(yàn)證在客服端程序上,客戶端程序段中含有解密時使用的密鑰,如我們使用DES對稱密鑰算法加密,破解人員很容就能根據(jù)客服端程序?qū)懗鲎约旱淖詸C(jī),從而完成注冊,在軟件保護(hù)中,這是很不安全的。但我們使用RSA加密算法,這些問題就迎刃而解了,因?yàn)镽SA算法的密鑰對私鑰和公鑰是非

64、對稱的,客服端程序驗(yàn)證時使用公鑰進(jìn)行解密,注冊機(jī)由開發(fā)商保管,注冊機(jī)使用私鑰加密生成注冊碼,破解者根據(jù)公鑰推導(dǎo)出私鑰在理論上是不可能的,開發(fā)商為了增大破解難度,還可以加長密鑰的位數(shù)和分組的長度,這使得該軟件在其生命周期內(nèi)可以有效避免被人破解,非法使用。 4 系統(tǒng)詳細(xì)設(shè)計(jì)及實(shí)現(xiàn) 4.1 開發(fā)環(huán)境介紹 4.1.1 Visual C++ 6.0 介紹 用 VC6 編寫并處理的任何程序都與工程有關(guān)(都要創(chuàng)建一個與其相關(guān)的工程),而每一個工程又總與一個工程工作區(qū)相關(guān)聯(lián)。實(shí)際上,VC6 是通過工程工作區(qū)來組織工程及其各相關(guān)元素的,就好像是一個工作間(對應(yīng)于一個獨(dú)立的文件夾

65、,或稱子目錄),以后程序所牽扯到的所有的文件、資源等元素都將放入到這一工作間中,從而使得各個工程之間互不干擾,使編程工作更有條理,更具模塊化。最簡單情況下,一個工作區(qū)中用來存放一個工程,代表著某一個要進(jìn)行處理的程序(我們先學(xué)習(xí)這種用法)。但如果需要,一個工作區(qū)中也可以用來 存放多個工程,其中可以包含該工程的子工程或者與其有依賴關(guān)系的其他工程。 可看出,工程工作區(qū)就像是一個“容器”,由它來“盛放”相關(guān)工程的所有有關(guān)信息,當(dāng)創(chuàng)建新工程時,同時要創(chuàng)建這樣一個工程工作區(qū),而后則通過該工作窗口來觀察與存取此工程的各種元素及其有關(guān)信息。創(chuàng)建工程工作區(qū)之后,系統(tǒng)將創(chuàng)建出一個相應(yīng)的工作區(qū)文件(.d

66、sw),用來存放與該工作區(qū)相關(guān)的信息;另外還將創(chuàng)建出的其他幾個相關(guān)文件是:工程文件(.dsp)以及選擇信息文件(.opt) 等。 編制并處理 C++程序時要創(chuàng)建工程,VC6已經(jīng)預(yù)先為用戶準(zhǔn)備好了近20 種不同的工程類型以供選擇,選定不同的類型意味著讓 VC6 系統(tǒng)幫著提前做某些不同的準(zhǔn)備以及初始化工作(例如,事先為用戶自動生成一個所謂的底層程序框架或稱框架程序,并進(jìn)行某些隱含設(shè)置,如隱含位置、預(yù)定義常量、輸出結(jié)果類型等)。工程類型中,其中有一個為“MFC AppWizard(exe)”如圖4.1所示,它是我們本設(shè)計(jì)要掌握的、用來編制具有可視化窗體界面運(yùn)行C++程序的工程。 圖4.1 Visual C++ 6.0開發(fā)環(huán)境 4.1.2 MFC程序開發(fā)流程 4.1.2.1 MFC介紹 MFC,微軟基礎(chǔ)類(Microsoft Foundation Classes),同VCL類似,是一種Application Framework,隨微軟Visual C++ 開發(fā)工具發(fā)布。目前最新版本為9.0(截止2008年11月)。該類庫提供一組通用的可重用的類庫供開發(fā)人員使用。

展開閱讀全文
溫馨提示:
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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!