【正文】
t float properly or catch fish. And if the birds weren39。 beaks) for perfume. Other products w ould later include crayons, candles, soap, pet food, fertiliser, glue. All these could be obtained from vegetable sources. But as long as unscrupulous people paid, whalers would go on breaking the law. Sadly, as he saw the mighty animal disappear, the medical officer walked away. Behind him a helicopter lif ted off with a swish and sw irl of blades. Whale spotting? He wondered, not for the first time, what was really happening aboard the factory ship. Whaling was bad enoughbut he suspected something still more sinister. However, he had learned that it wasn39。t have been very much bigger, not to have been sighted by the Lunar scopes. We would have known about it thirty years ago. All right. But you interrupted my bath for a damn pebble. It hardly seems worth it. Gaby looked smug. Maybe not to you, but if it was a tenth that size, I39。t you turn this way a little? Bill asked. Can you give me a good reason? He showed her one, and she gave him a little more than he had asked for. Then she found herself with a little more than she had .asked for, but as usual, he kne would be easy to move it. Cirocco frowned. Just how big is it, then? The PoloAugust, she was almost sure it was August looked at her with that calm, strangely unsettling face. I should say about two or three kilometers. Possibly less. Is that all? Gene grinned. You give me the numbers, I39。 she had learned early to be indifferent to a man39。t get any bette r, so before he could sense her disappointment she had cooled the relationship and let him pursue Gaby, the woman he had been drawn to from the first. Calvin was a general surgeon trained by NASA to be petent as ship39。 Why didn39。 and she said, 39。s not all. My docent told me about your lunch. Did Grandma Karen really tell you you were right? Yes. Gosh! I didn39。 (5) 學校可以公布學位論文的全部或部分內(nèi)容 (保密學位 論文在解密后遵守此規(guī)定 )。 關(guān)于學位論文使用權(quán)和研究成果知識產(chǎn)權(quán)的說明: 本人完全了解成都信息工程學院有關(guān)保管使用學位論文的規(guī)定,其中包括: (1) 學校有權(quán)保管并向有關(guān)部門遞交學位論文的原件與復印件。 致 謝 本文是在吳震老師的熱情關(guān)心和指導下完成的,他淵博的知識和嚴謹?shù)闹螌W作風使我受益匪淺,對順利完成本課題起到了極大的作用。 關(guān)閉文件: ()。 寫: int len1=()。 data = new char[(int)flen]。 DWORD flen。 (%d,t2t1)。j10。除非另有說明,本文的工作是原始性工作。 參考文獻 [1]羅斌等 . Visual c++ 編程技巧精選 500 例 [M] .北京:中國水利水電出版社 ,2021 年 1月 ,193205 [2]張耀仁 . C++程序設計徹底研究 [M].北京:中國鐵道出版社 2021年 7月 280284 [3]鄭莉,董淵 . C++語言程序設計 [M].北京:清華大學出版社第 2版 2021年 7月 [4]丁有和 鄭進 周怡軍 . Visual c++使用教程 .北京:電子工業(yè)出版社 2021年 1月 [5]于秋生,魏俊鵬 .C++Builder 6 實用編程 100 例 [M].北京:中國鐵道出版社 2021 年 7月 [6]王許書 ,王新輝 ,夏宏 . Montgomery方法及其在偽隨機數(shù)發(fā)生器中的應用 [J].計算機應用與軟件 2021年 6月 2324 [7]陳逢林 ,蘇厚勤 .Montgomery 算法的改進及其在 RSA 中的運用 [J].計算機應用與軟件 2021年 4月 2526 [8]CFile操作詳解 [EB]。其中包括對各類之間的組織細節(jié)、各程序模塊的具體編寫等,進行全面細致的檢查和修改,例如將大數(shù)據(jù)類型以對象指針傳遞而不拷貝,將簡單的 for 循環(huán)展開等。這是因為,考慮到中途可能因為意外斷電等原因引起操作中斷,為了保護已經(jīng)花費時間運算完成的數(shù)據(jù),將其直接寫入磁盤。主要有以下幾方面。 ② 文件輸入輸出消耗時間其次,因為磁盤讀寫速度要遠遠低于內(nèi)存讀寫速度。如表 33: 表 33:蒙哥馬利改進測試 文件大?。?B) 20 40 60 80 100 512位密鑰 Montgomery所用時間(毫秒) 35 35 34 37 42 普通 RSA 所用時間(毫秒) 119 123 128 133 133 1024為密鑰 Montgomery所用時間(毫秒) 70 73 89 101 105 普通 RSA 所用時間(毫秒) 442 461 463 469 467 通過上表可以得出,使用蒙哥馬利冪模運算確實一定程度上提高了 RSA 加密速度,使用 512 位密鑰加密文件蒙哥馬利算法改進后的加密所需時間為為改進的算法所用時間的三分之一左右,而 1024 位密鑰加密文件時,僅為四分之一左 右,蒙哥馬利冪模運算大大提高了加密效率,當文件大小更大,密鑰長度更長的情況下,蒙哥馬利冪模運算的優(yōu)勢將更能體現(xiàn)??梢?,本軟件密鑰長度越長,私有密鑰解密與公開密鑰加密的耗時比越大,這和其他軟件是一致的。對于較大的文件,加密位數(shù)對時間的影響十分明顯。 ⑴ .用相同的密鑰對不同長度的文件公鑰加密,私鑰解密,各自消耗的時間與待加密字符串大小的關(guān)系 隨即生成兩組密鑰,一組 n 長 512bit,一組 n 長 1024bit。這是因為對于大整數(shù)來說,可能出現(xiàn)在較長一段區(qū)間中沒有素數(shù)的情況。 密鑰生成測試數(shù)據(jù)見表 31。如 小節(jié)所敘述,尋找素數(shù)是一項頗為復雜的工作,其速度可能受以下影響: RSA加密需要的 n的位數(shù)(尋找素數(shù)的整數(shù)起點大小 bits),素數(shù)通過小素數(shù)表進行檢查,通過拉賓米勒算法測試素數(shù)。 CDemoDlg 主要包含界面功能的實現(xiàn),按鈕觸發(fā)時間等。由于字符串的結(jié)尾字符“ \0”實際上也可能是需要加密的數(shù)據(jù),所以置入的串長度并不能以“ \0”來決定,程序里引入一個 unsigned 類型的參數(shù)來決定置入的串長度,通過 Cfile 類中的 Getlength()函數(shù)獲得文件中字符串的長度,這樣就解決了加密連 \0數(shù)據(jù)時候被截斷的問題。所以,需要實現(xiàn)一系列的編碼轉(zhuǎn)換函數(shù),比如將 unsigned 指針指向的一段空間里保存的一個大數(shù),表 示成十六進制形式的字符串文本。 ⑹ . 按常規(guī) RSA 算法實現(xiàn)加密與解密 最后,類 CDemoDlg 基于前面的準備工作,實現(xiàn) RSA 密鑰生成和加解密的界面化功能。對應前面的敘述,參數(shù) a 對應 A,函數(shù)返回值即為 X 的最小值。y=2 即為所求。 Mod(PrimeTable[i]==0 為真? YO N (*this)。 而針對不定方程 axby=1 的最小整數(shù)解,古今中外都進行過詳盡的研究,西方有著名的歐幾里德算法,即一種輾轉(zhuǎn)相除法,中國有秦九韶的“大衍求一術(shù)”。拉賓米勒算法是公開的測試素數(shù)算法,直接通過函數(shù)的調(diào)用實現(xiàn),這里就不詳細介紹。 if(((!=1)||([0]!=1))amp。i5。} CBigInt S,A,I,K。 m_ulValue[0]++。i) { m_ulValue[i]=m_ulValue[i]1。i++)m_ulValue[i]=rand()*0x10000+rand()。代碼如下: void CBigInt::GetPrime(int bits) { unsigned i。外部只要調(diào)用本類實例的成員函數(shù) void GetPrime(int bits)。 } return X。 ((B))。 (*this)。 CBigInt CBigInt::RsaTrans(CBigIntamp。 ( 2)若 A為奇數(shù),則 A=A1,X=(X*N) MOD B。 mod m。 蒙哥馬利算法用到了因子 r。考慮到RSA 算法需要進行冪模運算,需要準備實現(xiàn)這些運算的方法。而且 0x100000000 進制的數(shù)組排列與 2進制流對于計算機來說,實際上是一回事,但是 這里 完全可以針對 unsigned long數(shù)組進行 “ 豎 式計算 ” ,而循環(huán)規(guī)模被降低到了 32 次之內(nèi),并且算法很容易理解。 另一種思路是將大數(shù)當作一個二進制流進行處理,使用各種移位和邏輯操作來進行加減乘除運算,但是這樣做代碼設計非常復雜,可讀性很低,難以理解也難以調(diào)試。 RSA 依賴大數(shù)運算,目前主流 RSA 算法都建立在 512 位到 1024 位的大數(shù)運算之上 , 大多數(shù)的編譯器只能支持到 64 位的整數(shù)運算,即在運算中所使用的整數(shù)必須小于等于 64 位,即: 0xffffffffffffffff 也就是 18446744073709551615,這遠遠達不到 RSA 的需要,于是需要專門建立大數(shù)運算庫來解決這一問題。 大數(shù)的四則運算由 CBIGINT 類實現(xiàn),類中申明了以下若干函數(shù): 基本操作與運算 : Mov,賦值運算,可 賦值為大數(shù)或普通整數(shù),可重載為運算符“ =” Cmp,比較運算,可重載為運算符“ ==”、“ !=”、“ =”、“ =”等 Add,加,求大數(shù)與大數(shù)或大數(shù)與普通整數(shù)的和,可重載為運算符“ +” Sub,減,求大數(shù)與大數(shù)或大數(shù)與普通整數(shù)的差,可重載為運算符“ ” Mul,乘,求大數(shù)與大數(shù)或大數(shù)與普通整數(shù)的積,可重載為運算符“ *” Div,除,求大數(shù)與大數(shù)或大數(shù)與普通整數(shù)的商,可重載為運算符“ /” Mod,模,求大數(shù)與大數(shù)或大數(shù)與普通整數(shù)的模,可重載為運算符“ %” 輸入輸出 : Get,從字符串按 10進制或 16進制格式輸 入到大數(shù) Put,將大數(shù)按 10 進制或 16 進制格式輸出到字符串 RSA 相關(guān)運算 : Rab,拉賓米勒算法進行素數(shù)測試 Euc,歐幾里德算法求解同余方程 RsaTrans,反復平方算法進行冪模運算 GetPrime,產(chǎn)生指定長度的隨機大素數(shù) 通過 Add, Sub, Mu, Div,實現(xiàn)四則運算函數(shù),并實現(xiàn)強制轉(zhuǎn)換運算符unsigned,以方便大數(shù)類型和普通整數(shù)的互相賦值。內(nèi)部集成眾多算法實現(xiàn)函數(shù),可方便的調(diào)用,給編程及調(diào)試帶來極大的方便,最終本工程選定以 VC++做為平臺 ,進行本軟件的開發(fā)工作。 ②可以對加密過程進行精確計時,反映在界面處。 ③ 可以裝載加密過的文件,并用指定的密鑰解密還原出原文件。 RSA加解密運算都是模冪運算,而模冪運算 x170。 影響模乘運算速度關(guān)鍵在于模運算,模運算其實是除法運算,除運算相對與加減乘運算要費時的多。速度 一直是 RSA 的缺陷。不管怎樣,分解 n 是最顯然的攻擊方法。用戶程序可以直接使用 j