久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

基于U盤和網絡的加密解密系統

時間:2019-05-15 02:01:49下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《基于U盤和網絡的加密解密系統》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《基于U盤和網絡的加密解密系統》。

第一篇:基于U盤和網絡的加密解密系統

軟件 2016年32卷

IT傳媒品牌

基于U盤和網絡的加密解密系統

許永正[1]

(1.連云港杰瑞深軟科技有限公司,江蘇 連云港 222006)摘要:本文提出并實現了一種基于U盤和網絡的加密解密系統,介紹了系統的功能和組成。整個系統由相對獨立的加密系統、解密系統和校核系統三個部分組成,利用成熟的加密算法和數字簽名等技術對傳輸的數據進行加密、解密和校驗。實驗結果表明,該系統極大的提高了數據的保密性和安全性。關鍵詞:信息安全技術;加密;解密;數據安全

中圖分類號:TP393.09 文獻標識碼:A

An Encryption and Decryption System Based on U-disk and

Network

XU Yong-zheng

(Lian Yun Gang JARI Deep Soft Technology Co.,Ltd,Lian Yun Gang

222006,China)Abstract: This paper proposes and implements a encryption to decrypt system based on u-disk and network, this paper introduces the system function and composition.The whole system consists of relatively independent system of encryption, decryption and checking system of three parts, using the mature encryption algorithm and digital signature technology for the transmission of data encryption, decryption and validation.The experimental results show that the system greatly improves the privacy and the security of data.Key words: information security technology, encryption, decryption, data security

0、引言

隨著計算機網絡技術的發展和Internet的普及,病毒、木馬、黑客等問題日益威脅著計

[1]算機和網絡的正常使用,信息安全技術越來越受到人們的重視,尤其是在商業、軍事等對數據的保密性、安全性要求很高的領域。

在日常工作中,網絡由于數據傳輸方便快捷,U盤等可讀寫的移動存儲介質由于攜帶方便、可重復使用等特點,已經成為人們傳輸數據的主要手段和工具,但是網絡數據傳輸容易被他人截取,移動存儲介質上的數據一般都是明文存儲,他人可以直接讀取,數據的保密性和安全性很低。

本文實現的加密解密系統不管是通過網絡還是U盤傳輸數據,都可以方便的對數據進行加密和解密,極大的提高了數據保密性和安全性。

1、定義

1.1 加密算法

加密解密系統的技術難點在于加密算法,如何選擇合適加密算法,產生強固的密鑰,提升系統安全性可靠性,是所有加密系統都要仔細考慮的。目前流行的加密算法分為單向散[3][3][3]列算法、公開密鑰算法、對稱算法三類。

[8]軟件 2016年32卷

IT傳媒品牌

1.2 單項散列算法

單項散列函數算法也稱為Hash算法,是一種將任意長度的消息壓縮到某一固定長度(消息摘要)的函數(不可逆過程)。Hash函數主要用于數字簽名、消息的完整性檢測、消息起源的認證檢測等。常見的散列算法有MD5、SHA、N-hash、PIPI-MD、HAVAL等。

1.3 公開密鑰算法

公開密鑰算法也稱為非對稱算法,用作加密的密鑰不同于用作解密的密鑰,而且解密密鑰不能根據加密密鑰計算出來。加密密鑰可以公開,即陌生人能用加密密鑰加密信息,但只有用相應的解密密鑰才能解密。加密密鑰叫公鑰,解密密鑰稱為私鑰。公開密鑰算法的安全性都是基于復雜的數學難題,根據所基于的數學難題分類,以下三類系統目前被認為是安全有效的:大整數因子分解系統(代表性的有RSA算法)、離散對數系統(代表性的有DSA、EIGamal算法)和橢圓曲線離散對數系統(ECC算法)。公鑰算法的主要局限在于,這種加密形式的速度相對較低。

1.4 對稱算法

對稱加密算法的加密密鑰和解密密鑰完全相同,所以也稱為共享密鑰加密或機密密鑰加密。其安全性依賴于以下兩個因素:第一、加密算法必須是足夠強,僅僅基于密文本身去解密信息在實踐中是不可能的;第二、加密數據的安全性依賴于密鑰的秘密性,而不是算法的秘密性。衡量對稱算法優劣的主要尺度是其密鑰的長度。密鑰越長,在找到解密數據所需的正確密鑰之前必須測試的密鑰數量就越多。需要測試的密鑰越多,破解這種算法就越困難。有了好的加密算法和足夠長的密鑰,如果有人想在一段實際可行的時間內逆轉轉換過程,并從暗文中推導出明文,從計算的角度來講,這種做法是行不通的。典型的對稱加密算法包括:DES、BlowFish等。

1.5 數字簽名

對文件進行加密只解決了傳送信息的保密問題,而防止他人對傳輸的文件進行破壞,以

[5]及如何確定發信人的身份還需要采取其它的手段,這一手段就是數字簽名。在電子商務安全保密系統中,數字簽名技術有著特別重要的地位,在電子商務安全服務中的源鑒別、完整性服務、不可否認服務中,都要用到數字簽名技術。在電子商務中,完善的數字簽名應具備簽字方不能抵賴、他人不能偽造、在公證人面前能夠驗證真偽的能力。

電子商務中數據傳輸的幾個安全性需求 :

(1)數據的保密性:用于防止非法用戶進入系統及合法用戶對系統資源的非法使用;通過對一些敏感的數據文件進行加密來保護系統之間的數據交換,防止除接收方之外的第三方截獲數據及即使獲取文件也無法得到其內容。如在電子交易中,避免遭到黑客的襲擊使信用卡信息丟失的問題。

(2)數據的完整性:防止非法用戶對進行交換的數據進行無意或惡意的修改、插入,防止交換的數據丟失等。

(3)數據的不可否認性:對數據和信息的來源進行驗證,以確保數據由合法的用戶發出;防止數據發送方在發出數據后又加以否認;同時防止接收方在收到數據后又否認曾收到過此數據及篡改數據。

上述需求對應于防火墻、加密、數字簽名、身份認證等技術,但其關鍵在于數字簽名技術。

1.6 密鑰管理體制

密碼系統的兩個基本要素是加密算法和密鑰管理。加密算法是一些公式和法則,它規定了明文和密文之間的變換方法。由于密碼系統的反復使用,僅靠加密算法已難以保證信息的安全了。事實上,加密信息的安全可靠依賴于密鑰系統,密鑰是控制加密算法和解密算法的關鍵信息,它的產生、傳輸、存儲等工作是十分重要的。[5]軟件 2016年32卷

IT傳媒品牌

2、概述

本文實現的系統由加密系統、解密系統和校核系統三個部分組成。加密系統負責對待加密文件進行加密并產生密鑰,將加密后的數據按照自定義格式存入移動存儲介質(在本文中稱之為目標卡),密鑰存入另一個移動存儲介質(在本文中稱之為解鎖卡)。同時加密系統還提供網絡接口,將目標密文文件和解鎖文件傳輸給解密系統,將待加密文件傳送給校核系統;解密系統是加密系統的逆過程,它從網絡接口或者可移動存儲介質獲得目標密文文件和密鑰,將目標密文文件解密為明文,同時解密系統提供的網絡接口將解密后的明文發送給校核系統;校核系統通過網絡接口或者移動存儲介質獲得待加密文件和明文,對二者進行比對驗證,并得出驗證結果。三個系統分別安裝在三臺計算機上,它們通過預定義的接口進行通信和數據交換。

系統流程圖如圖1所示: 軟件 2016年32卷

IT傳媒品牌

加密系統加密操作選擇待加密文件加密處理甲密文文件儲存目標卡密鑰文件儲存解鎖卡校核處理乙乙校核系統驗證結果* 解密系統目標卡甲密文文件甲解鎖卡甲密鑰文件+*解密處理乙+乙明文備注:+ : 表示取甲數據或者乙數據,二者之一* : 表示取甲數據和乙數據,二者缺一不可: 表示數據流從網絡傳輸:表示移動存儲介質數據:表示存儲數據:表示處理過程圖1 加密解密系統流程圖

由上述系統功能可見,加密數據安全性主要取決于解鎖卡,需要防止非法人員同時獲取解鎖卡和目標卡后進行破解,所以系統還要對解鎖卡中密鑰進行二級加密,即采用所謂的二級密鑰管理體制。

在實際使用中,如果沒有校核系統,為了保證解密后數據的正確性,需要采用數字簽名技術,對加密數據和密鑰進行簽名驗證。這樣保證了解密時使用的密文數據與密鑰是由合法的加密系統產生的,并且沒有被修改或破壞,最終確保解密后數據的正確性。

同時,解密系統需要加強密碼保護機制,因為其中有用于驗證簽名文件的密鑰文件,保護這些密鑰,成為保衛系統安全的最后一道屏障。軟件 2016年32卷

IT傳媒品牌

由于三個系統之間需要交換數據,它們之間的數據接口也容易成為攻破系統保密措施的一個弱點。因此需要合理設計數據接口,交換數據時采用安全的加密協議。

3、加密系統

加密系統的功能為選擇加密算法對原始數據進行加密,并生成密鑰。然后將加密后的數據按照自定義格式存入目標卡(防止別人直接讀取數據),密鑰存入解鎖卡。流程圖如圖2所示:

原原原原原原*原/原原原原原原原原原原原原原原原原原原原原原原原原原原原原*原原原原原原RSA原原原原原原原原*原原原原原原原原G0原原原原原原原原原原原原原原原原原原原原原*原原原原原原原原原原原原原原原原原原原原原原原原原原原原原原原原原原*原原原原原S0 RSA原原原原原原原原原原原原原原原原原原原原原原原原原原原原原原原原原原原原原原原原原*原原原原原原原原原原原原原原原原原原原*原原原* : 原原原原原原原原原原原原原原原原原原原原原原原原:原原原原原:原原原原原原原原原原:原原原原原原原原:原原原原圖2 加密系統流程圖

:原原原原原原首先用戶選擇加密算法對原始數據進行加密,所有的加密算法都封裝在DLL中,其優點一是隱藏了算法的實現細節,二是增強了系統的可維護性和擴展性。原始數據加密后生成密文和主密鑰,密文和其簽名文件儲存到目標卡,主密鑰進行RSA加密生成工作密鑰,并對工作密鑰進行數字簽名,然后再對RSA算法產生的私鑰S0進行加密,最后將這些結果儲存到解鎖卡中。系統啟動時調用RSA算法產生了一對安全的密鑰(公鑰G0和私鑰S0),利用公鑰G0對主密鑰加密,同時進行簽名文件的加密(見1.1),另外也對私鑰S0進行了加密軟件 2016年32卷

IT傳媒品牌

(見1.2),增強系統的安全性。

加密時,系統處理流程按以下步驟進行:

(1)用戶輸入待加密原始數據文件(定義為OF),然后選擇加密算法。(2)系統調用的加密算法程序(定義為DLL),選擇的算法序號為XH, 生成“主密鑰”(定義為PK),并用PK和DLL對原始數據OF加密,生成密文文件(定義為SF)。

(3)系統調用RSA算法,生成密鑰對(公鑰G0,私鑰S0),該過程定義為WK。(4)用G0對SF進行數字簽名,生成簽名文件(定義為SSF)。(5)將SF與SSF合并,生成合成為已加密目標文件(定義為MSF),并保存到目標卡中;(6)用WK中的公鑰G0對PK加密,生成“工作密鑰”(定義為SPK)。(7)用G0對SPK進行數字簽名,生成簽名文件(定義為SSPK)。

(8)利用算法對WK中的私鑰S0進行加密,生成“加密后內容”(定義為SS0)。(9)將XH、SS0、SPK、SSPK合并,生成合成解鎖文件(定義為MSPK),并保存到解鎖卡中。

3.1 數字簽名及簽名文件加密處理流程

數字簽名及簽名文件處理完成兩個功能:數字簽名和簽名文件加密。簽名文件加密時采用加密系統產生的公鑰G0進行加密,因為公鑰G0是隨機產生的,安全性較高,并且解密用到的私鑰S0也經過了加密。流程圖如圖3所示:

來自待簽名、加密文件Hash函數計算密文散列值RSA隨機算法生成的公鑰G0圖3 數字簽名及簽名文件加密流程圖

RSA加密

3.2 私鑰S0加密處理流程

流程圖如圖4所示:

隨機獲得一組RSA密鑰對來自私鑰S0甲*公鑰G1*乙密鑰對集合丙密鑰對數組序號私鑰S1RSA加密關鍵密鑰送給加密后的內容送給加密后的內容 圖4私鑰S0加密流程圖

私鑰S0是一個相當關鍵的密鑰,獲得它就能破解工作密鑰得到主密鑰。傳統的加密系統多采用人為方式來保證私鑰的安全性,這樣就降低了系統的安全性。為了增強系統的安全軟件 2016年32卷

IT傳媒品牌

性,這里使用了一種策略,即對私鑰S0進行加密。對私鑰加密采用固定密鑰對,這些固定密鑰對是由RSA算法產生的安全密鑰對。每次私鑰S0加密時,系統隨機提取一組密鑰對(公鑰G1和私鑰S1),利用公鑰G1對私鑰S0進行加密,然后將加密后的關鍵密鑰和密鑰對集合序號合并到解鎖文件中,私鑰S1不作任何處理。

4、解密系統

解密系統通過讀取解鎖卡上的密鑰文件解密目標卡上的數據文件,從而得到還原的數據。然后將還原的數據存儲到指定位置,并通過網絡接口發送給校核系統。流程圖如圖5所示:

已加密目標文件分解甲解鎖文件分解乙*密文簽名文件密文**丙**工作密鑰戊丁密鑰對數組序號甲關鍵密鑰*乙加密算法編號工作密鑰簽名文件簽名驗證解密私鑰S0簽名驗證丙私鑰S0*解密主密鑰主密鑰乙甲*解密明文明文*發送給校核系統圖5解密系統流程圖

解密系統還提供簽名驗證功能(見2.1),用來確保密文的合法性,一旦密文遭到非法篡改,系統能夠及時發現。為解密出明文,系統要一步步獲得密鑰,首先根據關鍵密鑰和密鑰對集合序號解密出私鑰S0(見2.2),再根據私鑰S0和工作密鑰解密出主密鑰,最后才通過主密鑰、密文、加密算法編號解密出明文(見2.3)。

解密系統工作步驟為:

(1)將已加密目標文件進行分解,獲得密文簽名文件(SSF)和密文(SF)。

(2)對SSF進行簽名驗證,如果合法則繼續解密,若不合法則提示信息并結束解密。(3)將解鎖文件進行分解為密鑰對序列號(定義為KXH)、關鍵密鑰(定義為GK)、工作密鑰(SPK)、加密算法編號(XH)、工作密鑰簽名文件(SSPK)。

(4)將密鑰對序列號(KXH)和關鍵密鑰(GK)解密獲得私鑰S0。(5)將私鑰S0和工作密鑰SPK解密獲得主密鑰(PK)。(6)利用密文(SF)、主密鑰(PK)和加密算法編號(XH)解密出明文(OF)。(7)提供網絡接口將明文發送給校核系統。

4.1 簽名驗證處理流程

簽名驗證處理實現文件的合法性驗證。如果簽名文件經RSA算法解密的散列值1與被軟件 2016年32卷

IT傳媒品牌

簽名文件經過Hash變換后的散列值2一致,則表示驗證成功,否則驗證失敗。這里的Hash函數要和加密系統中數字簽名的Hash函數一致,這樣簽名驗證才能正常工作。流程圖如圖6所示:

私鑰S0來自簽名文件甲*RSA解密乙散列值1*甲驗證成功比對+相同不同來自被簽名文件(如密文)Hash函數計算散列值2乙驗證失敗,結束解密圖6簽名驗證處理流程圖

4.2 解密私鑰S0處理流程

流程圖如圖7所示:

來自密鑰對序號乙加密的密鑰對集合*獲得對應的一組密鑰對甲已加密的公鑰G1*乙已加密的私鑰S1甲*解密私鑰S1甲解密系統登錄密碼乙乙來自關鍵密鑰甲*解密私鑰S0送往私鑰S0 圖7解密私鑰S0處理流程圖

根據密鑰對序號,系統從密鑰對集合中取出已加密的公鑰G1和已加密的私鑰S1,對已加密的S1進行解密得到私鑰S1,再利用S1將關鍵密鑰解密為私鑰S0。值的注意的是,解密系統中的密鑰對集合與加密系統中的密鑰對集合存在對應關系不一致。實際上,解密系統中的密鑰對集合是經過加密的,它使用了解密系統登錄密碼進行對稱算法加密。有了這樣的策略,即使目標卡、解鎖卡、解鎖軟件都被盜取(解密軟件登錄密碼未被盜?。I取者仍然不能解密出明文,就算盜取者通過暴力手段跳過了密碼驗證環節,仍然解密不出明文,因為沒有軟件登錄密碼就無法解密出私鑰S1,也就無法解密出明文。

4.3 解密明文處理流程

首先系統根據加/解密算法編號確定加/解密算法,然后系統利用加/解密算法、密文、主密鑰解密出明文。其中解密系統用到的加/解密算法庫和加密系統使用的加/解密算法庫一軟件 2016年32卷

IT傳媒品牌

致。流程圖如圖8所示:

來自密文來自主密鑰來自加密算法編號乙*確定加/解密算法加/解密算法庫甲乙丙加/解密算法甲**解密送給明文

圖8解密明文處理流程圖

5、校核系統

校核系統用來驗證加密、解密的正確性和可靠性。原始數據和解密系統解密后的數據通過移動存儲介質或者網絡傳輸到校核系統進行比對,并生成驗證報告。流程圖如圖9所示:

來自加密系統的待加密明文比對來自解密系統解密獲得的明文驗證報告 圖9校核系統流程圖

6、結論

以上設計充分考慮了系統各方面可能存在的漏洞,嚴密防范了各種可能攻擊,讓一般技術手段很難破解。首先,假設非法人員先獲取了目標卡,顯然他是無法單靠目標卡解密上面保存的加密數據的;那么他同時獲得了目標卡和解鎖卡,同樣他還是無法獲得數據,因為解鎖卡上的密鑰是被加密的,而加密它們的密鑰保存在解密系統的密鑰對集合中,所以他還需要獲取解密系統;如果他只是想通過修改或更換數據,導致我們使用錯誤的數據,那么他還需要過數字簽名驗證這關,這同樣需要工作密鑰來解密簽名文件;解密系統安裝在艦船加固機上,我們可以通過各種硬件或軟件手段保證它的安全;然后我們再假設非法人員通過某種手段又獲得了解密系統的完整拷貝,那么現在他會碰到軟件密碼保護這個問題了,如果他沒有獲取到密碼,即使他通過軟件運行跟蹤、修改跳轉指令等破解手段,他會發現沒有密碼還是無法獲取關鍵的工作密鑰,而通過散列值反推出密碼也是不可能的;最后,如何保證密碼安全,這就已經不屬于技術范疇的問題了。當然,以上種種分析都是建立在加密算法高強度的基礎上的,只有難以在有限時間內解出的算法才能最終保護系統安全。

參考文獻:

[1] 趙澤茂,朱芳.信息安全技術[M].西安:電子科技大學出版社,2009.軟件 2016年32卷

IT傳媒品牌 [2] 武新華.加密解密全攻略(第2版)[M].北京:中國鐵道出版社,2008.[3] 林明星.數據加密技術的具體應用[J].軟件,2014.35(1):100.[4] 呂素忠,張毅霞.磁盤信息的加密[N].河南通信報,2000.[5] 卿斯漢.密碼學與計算機網絡安全[M].北京:清華大學出版社,2001.[6] 劉芳.一種數據庫加密系統的設計與實現[J].軟件,2012,33(11):97-98.[7] 李晉麗,段小波,王琳.基于過濾驅動的安全密碼框的研究與實現[J].軟件,2013,34(4):19-22.[8] 馬萌.Internet 密鑰交換改進協議研究[J].軟件,2013,34(5):74-75.作者簡介:

許永正,男,1981--,工程師,主要研究方向:網絡信息安全、企業管理軟件。

江蘇省科技型中小企業創新資金項目“煙草零售網絡管理信息系統”(項目編號:BC2007120)。

第二篇:RSA加密解密算法C語言代碼

#include #include #include

#include

#include #include #define MAX 100 #define LEN sizeof(struct slink)

void sub(int a[MAX],int b[MAX] ,int c[MAX]);

struct slink {

int bignum[MAX];/*bignum[98]用來標記正負號,1正,0負bignum[99]來標記實際長度*/

struct slink *next;};

/*/-------自己建立的大數運算庫------*/

void print(int a[MAX])

{

int i;

for(i=0;i

printf(“%d”,a[a[99]-i-1]);

printf(“nn”);

return;

}

int cmp(int a1[MAX],int a2[MAX]){

int l1, l2;int i;l1=a1[99];l2=a2[99];if(l1>l2)

return 1;

if(l1

return-1;

for(i=(l1-1);i>=0;i--)

{

if(a1[i]>a2[i])

return 1;

if(a1[i]

return-1;

}

return 0;}

void mov(int a[MAX],int *b){ int j;

for(j=0;j

b[j]=a[j];

return;}

void mul(int a1[MAX],int a2[MAX],int *c){ int i,j;int y;int x;int z;int w;int l1, l2;l1=a1[MAX-1];l2=a2[MAX-1];if(a1[MAX-2]=='-'&& a2[MAX-2]=='-')

c[MAX-2]=0;else if(a1[MAX-2]=='-')

c[MAX-2]='-';else if(a2[MAX-2]=='-')

c[MAX-2]='-';for(i=0;i

for(j=0;j

{

x=a1[i]*a2[j];

y=x/10;

z=x%10;

w=i+j;

c[w]=c[w]+z;

c[w+1]=c[w+1]+y+c[w]/10;

c[w]=c[w]%10;

} } w=l1+l2;if(c[w-1]==0)w=w-1;c[MAX-1]=w;return;}

void add(int a1[MAX],int a2[MAX],int *c){

int i,l1,l2;int len,temp[MAX];int k=0;l1=a1[MAX-1];l2=a2[MAX-1];if((a1[MAX-2]=='-')&&(a2[MAX-2]=='-')){ c[MAX-2]='-';} else if(a1[MAX-2]=='-'){ mov(a1,temp);temp[MAX-2]=0;sub(a2,temp,c);return;} else if(a2[MAX-2]=='-'){ mov(a2,temp);temp[98]=0;sub(a1,temp,c);return;}

if(l1

c[i]=(a1[i]+a2[i]+k)%10;

k=(a1[i]+a2[i]+k)/10;} if(l1>len){

for(i=len;i

{

c[i]=(a1[i]+k)%10;

k=(a1[i]+k)/10;

}

if(k!=0)

{

c[l1]=k;

len=l1+1;

}

else len=l1;} else {

for(i=len;i

{

c[i]=(a2[i]+k)%10;

k=(a2[i]+k)/10;

}

if(k!=0)

{

c[l2]=k;

len=l2+1;

}

else len=l2;}

c[99]=len;

return;}

void sub(int a1[MAX],int a2[MAX],int *c){ int i,l1,l2;int len,t1[MAX],t2[MAX];int k=0;l1=a1[MAX-1];l2=a2[MAX-1];if((a1[MAX-2]=='-')&&(a2[MAX-2]=='-')){ mov(a1,t1);

mov(a2,t2);t1[MAX-2]=0;

t2[MAX-2]=0;sub(t2,t1,c);return;} else if(a2[MAX-2]=='-'){ mov(a2,t2);t2[MAX-2]=0;add(a1,t2,c);return;} else if(a1[MAX-2]=='-'){ mov(a2,t2);t2[MAX-2]='-';add(a1,t2,c);return;}

if(cmp(a1,a2)==1){

len=l2;for(i=0;i

if((a1[i]-k-a2[i])<0){

c[i]=(a1[i]-a2[i]-k+10)%10;

k=1;}

else

{

c[i]=(a1[i]-a2[i]-k)%10;

k=0;

} }

for(i=len;i

{

if((a1[i]-k)<0){

c[i]=(a1[i]-k+10)%10;

k=1;}

else

{

c[i]=(a1[i]-k)%10;

k=0;

}

}

if(c[l1-1]==0)/*使得數組C中的前面所以0字符不顯示了,如1000-20=0980--->顯示為980了*/

{

len=l1-1;

i=2;

while(c[l1-i]==0)/*111456-111450=00006,消除0后變成了6;*/

{

len=l1-i;

i++;

}

}

else

{

len=l1;

} } else if(cmp(a1,a2)==(-1)){

c[MAX-2]='-';

len=l1;

for(i=0;i

if((a2[i]-k-a1[i])<0){

c[i]=(a2[i]-a1[i]-k+10)%10;

k=1;}

else

{

c[i]=(a2[i]-a1[i]-k)%10;

k=0;

} }

for(i=len;i

{

if((a2[i]-k)<0){

c[i]=(a2[i]-k+10)%10;

k=1;}

else

{

c[i]=(a2[i]-k)%10;

k=0;

}

}

if(c[l2-1]==0)

{

len=l2-1;

i=2;

while(c[l1-i]==0)

{

len=l1-i;

i++;

}

}

else len=l2;

}

else if(cmp(a1,a2)==0)

{

len=1;

c[len-1]=0;

} c[MAX-1]=len;return;}

void mod(int a[MAX],int b[MAX],int *c)/*/c=a mod b//注意:經檢驗知道此處A和C的數組都改變了。*/ { int d[MAX];mov(a,d);while(cmp(d,b)!=(-1))/*/c=a-b-b-b-b-b.......until(c

sub(d,b,c);

mov(c,d);/*/c復制給a*/ }

return;}

void divt(int t[MAX],int b[MAX],int *c ,int *w)/*//試商法//調用以后w為a mod b, C為a div b;*/ {

int a1,b1,i,j,m;/*w用于暫時保存數據*/ int d[MAX],e[MAX],f[MAX],g[MAX],a[MAX];

mov(t,a);

for(i=0;i

e[i]=0;for(i=0;i

d[i]=0;for(i=0;i

b1=b[MAX-1];if(cmp(a,b)==(-1)){

c[0]=0;

c[MAX-1]=1;

mov(t,w);

return;} else if(cmp(a,b)==0){

c[0]=1;

c[MAX-1]=1;

w[0]=0;

w[MAX-1]=1;

return;}

m=(a1-b1);

for(i=m;i>=0;i--)/*341245/3=341245-300000*1--->41245-30000*1--->11245-3000*3--->2245-300*7--->145-30*4=25--->25-3*8=1*/ {

for(j=0;j

d[j]=0;

d[i]=1;

d[MAX-1]=i+1;

mov(b,g);

mul(g,d,e);

while(cmp(a,e)!=(-1))

{

c[i]++;

sub(a,e,f);

mov(f,a);/*f復制給g*/

}

for(j=i;j

e[j]=0;

} mov(a,w);if(c[m]==0)c[MAX-1]=m;else c[MAX-1]=m+1;

return;}

void mulmod(int a[MAX] ,int b[MAX] ,int n[MAX],int *m)/*解決 了 m=a*b mod n;*/ { int c[MAX],d[MAX];int i;for(i=0;i

d[i]=c[i]=0;mul(a,b,c);

divt(c,n, d,m);

for(i=0;i

printf(“%d”,m[m[MAX-1]-i-1]);

printf(“nm length is : %d n”,m[MAX-1]);}

/*接下來的重點任務是要著手解決 m=a^p mod n的函數問題。*/

void expmod(int a[MAX] ,int p[MAX] ,int n[MAX],int *m){ int t[MAX],l[MAX],temp[MAX];/*/t放入2,l放入1;*/ int w[MAX],s[MAX],c[MAX],b[MAX],i;for(i=0;i

b[i]=l[i]=t[i]=w[i]=0;t[0]=2;t[MAX-1]=1;l[0]=1;l[MAX-1]=1;

mov(l,temp);mov(a,m);

mov(p,b);

while(cmp(b,l)!=0){

for(i=0;i

divt(b,t,w,c);/*// c=p mod 2 w= p /2*/

mov(w,b);/*//p=p/2*/

if(cmp(c,l)==0)/*/余數c==1*/ { for(i=0;i

mul(temp,m,w);

mov(w,temp);

for(i=0;i

divt(temp,n,w,c);/* /c為余c=temp % n,w為商w=temp/n */

mov(c,temp);}

for(i=0;i

mul(m,m,s);//s=a*a

for(i=0;i

divt(s,n,w,c);/*/w=s/n;c=s mod n*/

mov(c,m);}

for(i=0;i

mul(m,temp,s);

for(i=0;i

divt(s,n,w,c);

mov(c,m);/*余數s給m*/

m[MAX-2]=a[MAX-2];/*為后面的漢字顯示需要,用第99位做為標記*/

return;/*/k=temp*k%n;*/ }

int

is_prime_san(int p[MAX]){

int i,a[MAX],t[MAX],s[MAX],o[MAX];

for(i=0;i

s[i]=o[i]=a[i]=t[i]=0;

t[0]=1;

t[MAX-1]=1;

a[0]=2;// { 2,3,5,7 }

a[MAX-1]=1;

sub(p,t,s);

expmod(a, s, p ,o);

if(cmp(o,t)!= 0)

{

return 0;

}

a[0]=3;

for(i=0;i

expmod(a, s, p ,o);

if(cmp(o,t)!= 0)

{

return 0;

}

a[0]=5;

for(i=0;i

expmod(a, s, p ,o);

if(cmp(o,t)!= 0)

{

return 0;

}

a[0]=7;

for(i=0;i

expmod(a, s, p ,o);

if(cmp(o,t)!= 0)

{

return 0;

}

return 1;}

int coprime(int e[MAX],int s[MAX])/*//// 求兩個大數之間是否互質////*/ {

int a[MAX],b[MAX],c[MAX],d[MAX],o[MAX],l[MAX];

int i;for(i=0;i

l[i]=o[i]=c[i]=d[i]=0;o[0]=0;o[MAX-1]=1;l[0]=1;l[MAX-1]=1;mov(e,b);mov(s,a);do { if(cmp(b,l)==0){

return 1;} for(i=0;ia*/ mov(c,b);/*c--->b*/

}while(cmp(c,o)!=0);/* printf(“Ihey are not coprime!n”);*/ return 0;}

void prime_random(int *p,int *q){ int i,k;time_t t;

p[0]=1;

q[0]=3;

// p[19]=1;// q[18]=2;

p[MAX-1]=10;

q[MAX-1]=11;

do {

t=time(NULL);

srand((unsigned long)t);for(i=1;i

k=rand()%10;} p[p[MAX-1]-1]=k;

}while((is_prime_san(p))!=1);

printf(“素數 p 為

: ”);

for(i=0;i

printf(“nn”);

do {

t=time(NULL);

srand((unsigned long)t);for(i=1;i

}while((is_prime_san(q))!=1);

printf(“素數 q 為 : ”);

for(i=0;i

printf(“nn”);return;}

void erand(int e[MAX],int m[MAX]){ int i,k;time_t t;e[MAX-1]=5;printf(“隨機產生一個與(p-1)*(q-1)互素的 e :”);

do {

t=time(NULL);

srand((unsigned long)t);for(i=0;i

k=rand()%10;e[e[MAX-1]-1]=k;}while(coprime(e, m)!=1);

for(i=0;i

printf(“nn”);return;}

void rsad(int e[MAX],int g[MAX],int *d){ int

r[MAX],n1[MAX],n2[MAX],k[MAX],w[MAX];int

i,t[MAX],b1[MAX],b2[MAX],temp[MAX];mov(g,n1);mov(e,n2);for(i=0;i

k[i]=w[i]=r[i]=temp[i]=b1[i]=b2[i]=t[i]=0;b1[MAX-1]=0;b1[0]=0;/*/b1=0;*/ b2[MAX-1]=1;b2[0]=1;/*/b2=1;*/ while(1){

for(i=0;i

k[i]=w[i]=0;

divt(n1,n2,k,w);/*/k=n1/n2;*/

for(i=0;i

temp[i]=0;

mul(k,n2,temp);/*/temp=k*n2;*/

for(i=0;i

r[i]=0;

sub(n1,temp,r);

if((r[MAX-1]==1)&&(r[0]==0))/*/r=0*/

{

break;

}

else

{

mov(n2,n1);/*/n1=n2;*/

mov(r,n2);/*/n2=r;*/

mov(b2, t);/*/t=b2;*/

for(i=0;i

temp[i]=0;

mul(k,b2,temp);/*/b2=b1-k*b2;*/

for(i=0;i

b2[i]=0;

sub(b1,temp,b2);

mov(t,b1);

} }

for(i=0;i

t[i]=0;

add(b2,g,t);

for(i=0;i

temp[i]=d[i]=0;

divt(t,g,temp,d);

printf(“由以上的(p-1)*(q-1)和 e 計算得出的 d : ”);

for(i=0;i

printf(“nn”);}

/*/求解密密鑰d的函數(根據Euclid算法)***68000*/ unsigned long rsa(unsigned long p,unsigned long q,unsigned long e)/*/求解密密鑰d的函數(根據Euclid算法)*/ { unsigned long g,k,r,n1,n2,t;unsigned long b1=0,b2=1;

g=(p-1)*(q-1);n1=g;n2=e;

while(1){

k=n1/n2;

r=n1-k*n2;

if(r!=0)

{

n1=n2;

n2=r;

t=b2;

b2=b1-k*b2;

b1=t;

}

else

{

break;

}

}

return(g+b2)%g;} /*/-----------導入導出公鑰和私鑰-----/*/ void loadpkey(int e[MAX],int n[MAX])//導入公鑰 { FILE *fp;char filename[25],str[MAX],ch;int i,k;for(i=0;i

e[i]=n[i]=0;while(1){

printf(“n”);printf(“為導入(e,n),請輸入加密密鑰對文件路徑: n”);

scanf(“%s”,filename);

if((fp=fopen(filename,“r”))==NULL)

printf(“輸入的文件不存在,請重新輸入!n”);

else break;}

k=0;

while((ch=fgetc(fp))!=EOF)

{

if(ch!=' ')

{

str[k]=ch;

k++;

}

else

{

for(i=0;i

{

e[i]=str[k-i-1]-48;

}

e[MAX-1]=k;

k=0;

} }

for(i=0;i

n[i]=str[k-i-1]-48;

n[MAX-1]=k;

printf(“n加密密鑰 e : ”);

for(i=0;i

printf(“%d”,e[e[MAX-1]-i-1]);

printf(“n”);

printf(“n

公鑰 n : ”);

for(i=0;i

printf(“%d”,n[n[MAX-1]-i-1]);

printf(“n”);

fclose(fp);

printf(“n導入(e,n)成功!n”);

getchar();}

void loadskey(int d[MAX],int n[MAX])//導入私鑰 { { FILE *fp;char filename[25],str[MAX],ch;int i,k;for(i=0;i

d[i]=n[i]=0;while(1){ printf(“為導入(d,n),請輸入解密密鑰對文件的路徑: n”);

scanf(“%s”,filename);

if((fp=fopen(filename,“r”))==NULL)

{

printf(“輸入的文件不存在,請重新輸入!n”);

}

else break;}

k=0;

while((ch=fgetc(fp))!=EOF)

{

if(ch!=' ')

{

str[k]=ch;

k++;

}

else

{

for(i=0;i

{

d[i]=str[k-i-1]-48;

}

d[MAX-1]=k;

k=0;

} }

for(i=0;i

n[i]=str[k-i-1]-48;

n[MAX-1]=k;

printf(“n解密密鑰 d : ”);

for(i=0;i

printf(“%d”,d[d[MAX-1]-i-1]);

printf(“n”);

printf(“n

公鑰 n : ”);

for(i=0;i

printf(“%d”,n[n[MAX-1]-i-1]);

printf(“n”);

fclose(fp);

printf(“n導入(d,n)成功!n”);

getchar();} }

void savepkey(int e[MAX],int n[MAX])//導出公鑰 {

FILE *fp;

int i;

char savefile[25],ch;printf(“導出加密密鑰(e,n),存放的文件路徑為: ”);

scanf(“%s”,savefile);printf(“n”);

fp=fopen(savefile,“w”);for(i=0;i

ch=e[e[MAX-1]-i-1]+48;

fputc(ch,fp);} ch=' ';fputc(ch,fp);for(i=0;i

ch=n[n[MAX-1]-i-1]+48;

fputc(ch,fp);} fclose(fp);printf(“n保存(e,n)操作完成!n”);}

void saveskey(int d[MAX],int n[MAX])//導出私鑰 {

FILE *fp;

int i;

char savefile[25],ch;printf(“導出解密密鑰(d,n),存放的文件路徑為: ”);

scanf(“%s”,savefile);printf(“n”);

fp=fopen(savefile,“w”);for(i=0;i

ch=d[d[MAX-1]-i-1]+48;

fputc(ch,fp);} ch=' ';fputc(ch,fp);for(i=0;i

ch=n[n[MAX-1]-i-1]+48;

fputc(ch,fp);} fclose(fp);printf(“n保存(d,n)操作完成!n”);

}

/*/-----------加密和解密的塊-----/*/

void printbig(struct slink *h){

struct slink *p;

int i;

p=(struct slink *)malloc(LEN);

p=h;

if(h!=NULL)do

{

for(i=0;i

bignum[MAX-1];i++)

printf(“%d”,p->bignum[p->bignum[MAX-1]-i-1]);

p=p->next;}

while(p!=NULL);

printf(“nn”);

}

void tencrypto(int e[MAX], int n[MAX])/*//對有需要的文件進行加密*/ {

FILE *fp;

int i,k,count,temp,c;

char filename[25],ch,encryfile[25];

struct slink *p,*p1,*p2;

struct slink *h;

h=p=p1=p2=(struct slink *)malloc(LEN);

h=NULL;

printf(“n輸入需要加密的文件路徑 : ”);

scanf(“%s”,filename);

if((fp=fopen(filename,“r”))==NULL)

{

printf(“Cannot open file!n”);

exit(0);

} printf(“n文件的原文內容:nn”);

count=0;

while((ch=fgetc(fp))!=EOF)

{

putchar(ch);

c=ch;

k=0;if(c<0){

c=abs(c);/*/把負數取正并且做一個標記*/

p1->bignum[MAX-2]='0';} else {

p1->bignum[MAX-2]='1';}

while(c/10!=0){

temp=c%10;

c=c/10;

p1->bignum[k]=temp;

k++;} p1->bignum[k]=c;

p1->bignum[MAX-1]=k+1;count=count+1;if(count==1)

h=p1;else p2->next=p1;p2=p1;

p1=(struct slink *)malloc(LEN);}

p2->next=NULL;

printf(“n”);

fclose(fp);

//

printf(“加密后文件的保存路徑 : n”);//

scanf(“%s”,encryfile);//

fp=fopen(encryfile,“w”);

fp=fopen(filename,“w”);

p=p1=(struct slink *)malloc(LEN);

p=h;

printf(“n加密后文件中所形成密文:nn”);

if(h!=NULL)do

{

expmod(p->bignum , e ,n ,p1->bignum);

ch=p1->bignum[MAX-2];

printf(“%c”,ch);

fputc(ch,fp);

if((p1->bignum[MAX-1]/10)==0)/*/判斷p1->bignum[99]的是否大于十;*/

{

ch=0+48;

printf(“%c”,ch);

fputc(ch,fp);

ch=p1->bignum[MAX-1]+48;

printf(“%c”,ch);

fputc(ch,fp);

}

else

{

ch=p1->bignum[MAX-1]/10+48;

printf(“%c”,ch);

fputc(ch,fp);

ch=p1->bignum[MAX-1]%10+48;

printf(“%c”,ch);

fputc(ch,fp);

}

for(i=0;i

bignum[MAX-1];i++)

{

printf(“%d”,p1->bignum[i]);

ch=p1->bignum[i]+48;

fputc(ch,fp);

}

p=p->next;

p1=(struct slink *)malloc(LEN);}while(p!=NULL);printf(“nn”);

fclose(fp);return;}

void tdecrypto(int d[MAX], int n[MAX]){

FILE *fp;

struct slink *h,*p1,*p2;

char ch,encryfile[25],decryfile[25];

int i,j,k,c,count,temp;

printf(“n輸入加密過的文件路徑 : ”);

scanf(“%s”,encryfile);

if((fp=fopen(encryfile,“r”))==NULL)

{

printf(“此文件不存在!n”);

exit(0);

}

printf(“n文件中密文內容:nn”);

i=0;

j=3;

count=0;

h=p1=p2=(struct slink *)malloc(LEN);

while((ch=fgetc(fp))!=EOF)

{

putchar(ch);

c=ch;

if(j==3)

{

p1->bignum[MAX-2]=c;

j--;

}

else if(j==2)

{

temp=c-48;

j--;

}

else if(j==1)

{

p1->bignum[MAX-1]=temp*10+c-48;

j--;

}

else if(j==0)

{

p1->bignum[i]=c-48;

i++;

if(i==p1->bignum[MAX-1])

{

i=0;

j=3;

count++;

if(count==1)

h=p1;

else p2->next=p1;

p2=p1;

p1=(struct slink *)malloc(LEN);

}

}

}

p2->next=NULL;

printf(“n”);

fclose(fp);

// printf(“解密后的明文文件保存路徑 : n”);//

scanf(“%s”,decryfile);//

fp=fopen(decryfile,“w”);

fp=fopen(encryfile,“w”);printf(“n解密密文后文件中的明文:nn”);p2=(struct slink *)malloc(LEN);

p1=h;k=0;if(h!=NULL)/*/temp為暫存ASIIC碼的int值*/

do

{

for(i=0;i

p2->bignum[i]=0;

expmod(p1->bignum , d ,n ,p2->bignum);

temp=p2->bignum[0]+p2->bignum[1]*10+p2->bignum[2]*100;

if((p2->bignum[MAX-2])=='0')

{

temp=0-temp;

}/*/轉化為正確的ASIIC碼,如-78-96形成漢字 */

ch=temp;/* str[k]--->ch */

printf(“%c”,ch);/* str[k]--->ch */

fputc(ch,fp);/*/寫入文件str[k]--->ch*/

k++;

p1=p1->next;

p2=(struct slink *)malloc(LEN);

}while(p1!=NULL);

printf(“nn”);

fclose(fp);return;}

struct slink *input(void)/*/輸入明文并且返回頭指針,沒有加密時候轉化的數字*/ {

struct slink *head;

struct slink *p1,*p2;

int i,n,c,temp;

char ch;

n=0;p1=p2=(struct slink *)malloc(LEN);head=NULL;printf(“n請輸入你所要加密的內容 : n”);while((ch=getchar())!='n')

{ i=0;c=ch;if(c<0){

c=abs(c);/*/把負數取正并且做一個標記*/

p1->bignum[MAX-2]='0';}

else {

p1->bignum[MAX-2]='1';} while(c/10!=0){

temp=c%10;

c=c/10;

p1->bignum[i]=temp;

i++;} p1->bignum[i]=c;

p1->bignum[MAX-1]=i+1;n=n+1;if(n==1)

head=p1;else p2->next=p1;p2=p1;

p1=(struct slink *)malloc(LEN);}

p2->next=NULL;

return(head);}

struct slink *jiami(int e[MAX],int n[MAX],struct {

struct slink *p;

struct slink *h;

struct slink *p1,*p2;

int m=0,i;printf(“n”);

printf(“加密后形成的密文內容:n”);p1=p2=(struct slink*)malloc(LEN);h=NULL;

p=head;

if(head!=NULL)do

slink *head){

expmod(p->bignum , e ,n ,p1->bignum);

for(i=0;i

bignum[MAX-1];i++){

printf(“%d”,p1->bignum[p1->bignum[MAX-1]-1-i]);}

m=m+1;if(m==1)

h=p1;else p2->next=p1;p2=p1;

p1=(struct slink *)malloc(LEN);

p=p->next;} while(p!=NULL);p2->next=NULL;

p=h;

printf(“n”);

return(h);

}

void jiemi(int d[MAX],int n[MAX],struct slink *h){

int

i,j,temp;

struct slink *p,*p1;

char ch[65535];

p1=(struct slink*)malloc(LEN);

p=h;

j=0;

if(h!=NULL)

do

{

for(i=0;i

p1->bignum[i]=0;

expmod(p->bignum , d ,n ,p1->bignum);

temp=p1->bignum[0]+p1->bignum[1]*10+p1->bignum[2]*100;

if((p1->bignum[MAX-2])=='0')

{

temp=0-temp;

}

ch[j]=temp;

j++;

p=p->next;}while(p!=NULL);printf(“n”);printf(“解密密文后所生成的明文:n”);for(i=0;i

printf(“%c”,ch[i]);printf(“n”);return;

}

void menu(){

printf(“nnn”);printf(“nnn”);printf(“

R--------產生密鑰對

nnn”);

printf(“

S--------保存密鑰對

nnn”);printf(“

L--------載入密鑰對

nnn”);printf(“

E--------對文件加密

nnn”);printf(“

D--------對文件解密

nnn”);printf(“

T--------簡單測試

nnn”);printf(“

Q--------退出

nnn”);printf(“請選擇一種操作:”);}

/*/------------------主MAIN函數----/*/ void main(){

int i;

char c;

int p[MAX],q[MAX],n[MAX],d[MAX],e[MAX],m[MAX],p1[MAX],q1[MAX];struct slink *head,*h1,*h2;

for(i=0;i

m[i]=p[i]=q[i]=n[i]=d[i]=e[i]=0;/*/簡單初始化一下*/

while(1)

{

menu();

c=getchar();

getchar();//接受回車符

if((c=='r')||(c=='R'))//操作r產生密鑰對

{

for(i=0;i

m[i]=p[i]=q[i]=n[i]=d[i]=e[i]=0;

printf(“nnnnnnnnn”);

printf(“nn隨機密鑰對產生如下:nn”);

prime_random(p,q);/*/隨機產生兩個大素數*/

mul(p,q,n);

printf(“由 p、q 得出 n :”);

print(n);

mov(p,p1);

p1[0]--;

mov(q,q1);

q1[0]--;

/*/q-1;*/

mul(p1,q1,m);//m=(p-1)*(q-1)

erand(e,m);

rsad(e,m,d);

printf(“密鑰對產生完成,現在可以直接進行加解密文件!n”);

printf(“n按任意鍵回主菜單…………”);

getchar();}

else if((c=='l')||(c=='L'))

{

printf(“nn選擇導入密鑰類型:加密密鑰(P)還是解密密鑰(S)?”);

c=getchar();

getchar();

if((c=='p')||(c=='P'))

loadpkey(e,n);

else if((c=='s')||(c=='S'))

loadskey(d,n);

printf(“n按任意鍵回主菜單…………”);

getchar();

}

else if((c=='e')||(c=='E'))

{

tencrypto(e, n);

printf(“n加密文件操作完成!n”);

printf(“n按任意鍵回主菜單…………”);

getchar();

getchar();

}

else if((c=='d')||(c=='D'))

{

tdecrypto(d, n);

printf(“n解密文件操作完成!n”);

printf(“n按任意鍵回主菜單…………”);

getchar();

getchar();

}

else if((c=='s')||(c=='S'))

{

savepkey(e,n);

printf(“n”);

saveskey(d,n);

printf(“n按任意鍵回主菜單…………”);

getchar();

getchar();

}

else if((c=='T')||(c=='t'))

{

head=input();

h1=jiami(e, n, head);

jiemi(d, n, h1);

printf(“nRSA測試工作完成!n”);

printf(“n按任意鍵回主菜單…………”);

getchar();

}

else if((c=='Q')||(c=='q'))

break;

}

}

第三篇:臺電U盤加密大師操作說明

臺電“加密大師”制作方法

Ver:3.0

※注意:請在操作前一定要做好重要數據備份的工作!

如果您沒有“加密大師”程序,可到“臺電網站“(www.tmdps.cn)—>”驅動下載“—>”可移動存儲驅動程序“欄下載;下載時一定要對應產品型號。

此制作方法適用于鈦金系列、晶彩系列、晶靈III系列、晶致系列、欣悅系列、風尚系列、晶典系列、酷奇系列、精英系列、潮系列。

一、“格式化”(設置_刪除加密大師)操作說明

*、特別提示——使用臺電“格式化”工具(設置_刪除加密大師)格式化“已開啟了加密大師”的產品時,必須是在未輸入密碼登入到加密區之前進行格式化操作;一定不能在輸入密碼登入到加密區后再執行臺電“格式化”工具(設置_刪除加密大師)進行格式化操作。1.1 將本產品插入到電腦后,然后打開“我的電腦”并雙擊“臺電酷閃”盤符,進入到“臺電酷閃”中,如圖

一、圖二所示;

圖一

圖二

1.2 雙擊運行“使用工具及幫助文檔”文件夾,如圖三所示;

圖三

1.3 雙擊運行“設置_刪除加密大師”軟件,此時將彈出如下圖四所示的窗口;

圖四

1.4 直接點擊“開始格式化”,程序將對整個U盤進行格式化,此時所有數據將被刪除,U盤將格式化成一個公共區;單擊“確定”后再安全移除U盤,即完成“格式化”操作;如圖五所示;

圖五

注1:當“格式化”完成后移動存儲盤內將會產生“應用工具﹝設置_刪除加密大師.exe﹞” 的備份;

二、開啟“加密大師”(設置U盤密碼)

2.1 首先參照本說明的“1.1-1.3”小節,運行“設置_刪除加密大師”,并選擇“安全”項;如圖六所示;

圖六

注2:“輸入密碼”——輸入保密區的使用密碼,最少為一個字符,最多為13個字符; 注3:“確認密碼”——再次確認保密的使用密碼;

注4:“提示”——保密區之密碼提示,可輸入任何字符,最多為 16 個字符, 2.2 勾選“密碼”框,此時“輸入保密”及“確認密碼”欄中可能是輸入您想設置的密碼,密碼最多13個字符,最少為一個字符。輸入完成后您請再點選“分區”項并在此項中調節“保密區”容量的百分比,若您未調節分區的大小則“加密區”默認為“3MB”;如圖七所示;

圖七

注4: 當您點選“安全”項設定中的“密碼”并設置后,“分區”項里的容量拖動條才可以任意滑動;

注5:您可調整“公共區”及“保密區”的調整桿來設定分割各區域的容量,保密區與公共區啟用后最小分割容量均為“3MB”;

2.3 設置好“密碼”及“容量百分比”設定后,點擊“開始格式化”進行加密制作,格式化完成后安全移除U盤即完成加密設置;

圖八

注6: 加密設置成功后,U盤會生產“保密區”及”“公共區”;“公共區”可直接使用,“加密區”需要運行“加密大師”并輸入正確密碼后才能訪問;

2.3 “加密大師”程序為“Lock.exe”,您只需用鼠標雙擊她即可運行;如圖九所示;

圖九

注7:“已加鎖”表示保密區已上鎖,此時U盤僅可使用的是公共區;若為“未加鎖”則表示保密區未上鎖,可使用 U盤 “保密區”;

注8:“開鎖”——若U盤設定有保密功能,輸入密碼后按下“開鎖”按鈕將可進入保密數據區;

注9:“更改密碼”——按下此按鈕將會出現更改密碼的對話框,用戶只需按照提示進行密碼更換;如下圖十所示;

圖十

2.4 退加密區時,請雙擊加密區中的“密大師”程序為“Lock.exe”,再點擊“加鎖”按鍵即可;如圖十一所示;

圖十一

第四篇:c語言課程設計-文件加密解密(含源代碼)

C 語 言 課 程 設 計 實 驗 報 告

實驗名稱:文件加密解密 院系:軟件學院

學號:

年9月3日—9月17日 日期:2012

一:設計題目

1:設計圖形用戶界面。

2:對文件進行加密并對加密文件進行保存。3:對加密了的文件進行解密。

二:設計過程

設計過程中遇到的困難和解決方法: 1:不能很好地理解題意(通過老師的講解)。

2:不知道如何設計加密解密程序(通過翻閱書籍和上網查找資料)過程:

首先通過學習老師提供的資料了解大致的設計過程并懂得運用一些以前沒有學習過的c語言。先利用文本文件設計出加密解密的主要過程并能運行。知道如何運用fopen將原文件打開并用fread將原文件內容讀出來,然后進行加密設計并將加密的數據用fwrite寫進指定的文件中并保存。然后讀出加密的文件并解密并保存。最后在寫出的程序中加入圖形用戶界面,運用window,box,gotoxy等進行設計。

三:源代碼

#include /* 標準輸入、輸出函數 */ #include /* 標準庫函數 */ #include //*字符串處理函數 */ #include /* 字符操作函數 */ #include #include #define key_down 80 #define key_up 72 #define key_esc 1 #define key_enter 28 #define SIZE 1 void box(int startx,int starty,int high,int width);int get_key();char buf[20*20*4];/*/////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////加密解密 */ void fun(char *list,char *sd)/*加密過程*/ {

FILE *fp1,*fp2;char buf[1000];/*文件臨時存放處*/ register int ch;fp1=fopen(“e:list.txt”,“r”);/*用可讀方式打開文件*/ fp2=fopen(“e:sd.txt”,“w”);/*用可寫方式創建一個文件*/ if(fp1==NULL){ printf(“cannot open filen”);exit(1);} if(fp2==NULL){ printf(“cannot build filen”);exit(1);} ch=fgetc(fp1);/*讀出打開文件的光標處的一個字符*/ while(!feof(fp1))/*讀出的字符不是最后的字符*/ { ch=ch<<1;/*加密方法*/ fputc(ch,fp2);/*加密的字符存放在指定的地方*/ ch=fgetc(fp1);

} rewind(fp2);/*將光標移動到第一個字符前面*/ fread(buf,sizeof(buf),1,fp2);/*從文件的當前位置開始中讀取buf中存放的數據*/ printf(“%s”,buf);/*fclose(fp1);fclose(fp2);*/ }

void man(char *sd,char *ds)/*解密過程*/ { /*int n=0;*/ FILE *fp2,*fp3;register int fh;char buf1[1000];

fp2=fopen(“e:sd.txt”,“rb”);/*用可讀方式打開文件*/ fp3=fopen(“e:ds.txt”,“wb”);/*用可寫方式創建一文件*/ if(fp2==NULL){ printf(“cannot open filen”);exit(1);} if(fp3==NULL){ printf(“cannot build filen”);exit(1);} fh=fgetc(fp2);/*從光標處讀出一個字符*/ while(!feof(fp2))/*當讀出的字符到達最后一個則停止*/ { fh=fh>>1;/*解密方式*/

fputc(fh,fp3);/*解密的字符存放在指定的地方*/ fh=fgetc(fp2);} fread(buf1,sizeof(buf1),1,fp3);/*讀出buf1中所存放的數據*/ printf(“%s”,buf1);}

void main(){ int k;char *f[]={“jiami”,“jiemi”};/**界面的形式/ int key,y;int j,q;char list[300];char sd[300];char ds[300];char ch,fh;char buf[1000];char buf1[1000];FILE *fp1;FILE *fp2;int l1,l2;window(1,1,80,25);/*left,top,right,bottom,相對于屏幕的字符坐標,屏幕原點在左上角*/ gettext(20,10,40,14,buf);/*保存矩形屏幕上的字符*/

textbackground(7);/*背景顏色*/ textcolor(0);/*字體顏色*/ clrscr();/*清除矩形屏幕上的所有字符*/ gotoxy(24,10);/*將當前字符屏幕的光標位置移動到x,y的坐標位子*/ printf(“%s”,f[0]);gotoxy(24,14);printf(“%s”,f[1]);gettext(10,8,60,16,buf);box(22,9,3,30);/*建立一個小窗口*/ key=0;while(1){ while(bioskey(1)==0);/*讀取鍵盤值查詢鍵盤是否按下*/ key=get_key();/*按下了什么鍵盤*/

if(key==key_up||key==key_down){ y=wherey();/*得到字符模式下窗口光標的x坐標數值*/ if(key==key_up)y=y==10? y+4:10;/*當y=10光標向下移動四個位置否則將光標移動到y=10處*/ if(key==key_down)y=y==14? y-4:14;/*當y=14光標向下移動四個位置否則將光標移動到y=14處*/

puttext(10,8,60,16,buf);/*將gettext函數保存的字符恢復到屏幕上 */

gotoxy(24,y);

if(y==10){ textbackground(7);textcolor(0);box(22,9,3,30);textbackground(3);textcolor(15);gotoxy(24,y);cprintf(“%s”,f[0]);} else { textbackground(7);textcolor(0);box(22,13,3,30);textbackground(3);textcolor(15);gotoxy(24,y);cprintf(“%s”,f[1]);} }

if(key==key_enter&&y==10)且光標在y=10處 /*當按下enter鍵且光標在y=10處進行下步*/ { clrscr();textbackground(3);textcolor(15);/*clrscr();*/ gotoxy(24,5);printf(“input the file name for jiamin”);/*用戶給需要加密的文件加密 */ l1=strlen(“input the file name for jiami:”);/*待求長度的字符串指針*/ gotoxy(24+l1,5);scanf(“%s”,list);gotoxy(24,10);printf(“input file name for saven”);/*給加密后的文件命名,并保存*/ l2=strlen(“input file name for save:”);gotoxy(24+l2,10);scanf(“%s”,sd);fun(list,sd);fp1=fopen(“e:sd.txt”,“rb”);fread(buf1,sizeof(buf1),1,fp1);gotoxy(10,15);printf(“%sn”,buf1);getch();printf(“file haven jiami ,save now”);getche();break;} if(key==key_enter&&y==14){ clrscr();textbackground(3);textcolor(15);gotoxy(24,5);

printf(“input the file name for jiemi n”);/*用戶給需要解密的文件解密 */ l1=strlen(“input the file name for jiemi: ”);gotoxy(24+l1,5);scanf(“%s”,sd);gotoxy(24,10);printf(“input file name for save:n”);/*對解密的文件系統又可以提供保存路徑 */ l2=strlen(“input file name for save: ”);gotoxy(24+l2,10);scanf(“%s”,ds);man(sd,ds);fp2=fopen(“e:ds.txt”,“rb”);fread(buf1,sizeof(buf1),1,fp2);gotoxy(10,15);printf(“%sn”,buf1);getch();

printf(“file haven jiemi,save now”);getche();break;}

}

window(1,1,80,25);gettext(20,10,40,14,buf);

textbackground(7);textcolor(0);clrscr();gotoxy(24,10);printf(“%s”,f[0]);gotoxy(24,14);printf(“%s”,f[1]);gettext(10,8,60,16,buf);box(22,9,3,30);key=0;while(1){ while(bioskey(1)==0);key=get_key();

if(key==key_up||key==key_down){ y=wherey();if(key==key_up)y=y==10? y+4:10;if(key==key_down)y=y==14? y-4:14;puttext(10,8,60,16,buf);

gotoxy(24,y);

if(y==10)/*光標在10處的窗口*/ { textbackground(7);textcolor(0);box(22,9,3,30);textbackground(3);textcolor(15);gotoxy(24,y);cprintf(“%s”,f[0]);} else { textbackground(7);textcolor(0);box(22,13,3,30);textbackground(3);textcolor(15);gotoxy(24,y);cprintf(“%s”,f[1]);} }

if(key==key_enter&&y==10){ clrscr();textbackground(3);textcolor(15);/*clrscr();*/ gotoxy(24,5);printf(“input the file name for jiamin”);/*用戶給需要加密的文件加密 */ l1=strlen(“input the file name for jiami:”);gotoxy(24+l1,5);scanf(“%s”,list);gotoxy(24,10);printf(“input file name for saven”);/*給加密后的文件命名,并保存*/ l2=strlen(“input file name for save:”);gotoxy(24+l2,10);scanf(“%s”,sd);fun(list,sd);fp1=fopen(“e:sd.txt”,“rb”);fread(buf1,sizeof(buf1),1,fp1);gotoxy(10,15);printf(“%sn”,buf1);getch();printf(“file haven jiami ,save now”);getche();} if(key==key_enter&&y==14){ clrscr();textbackground(3);textcolor(15);gotoxy(24,5);

printf(“input the file name for jiemi n”);/*用戶給需要解密的文件解密 */ l1=strlen(“input the file name for jiemi: ”);gotoxy(24+l1,5);scanf(“%s”,sd);gotoxy(24,10);printf(“input file name for save:n”);/*對解密的文件系統又可以提供保存路徑 */ l2=strlen(“input file name for save: ”);gotoxy(24+l2,10);scanf(“%s”,ds);man(sd,ds);fp2=fopen(“e:ds.txt”,“rb”);fread(buf1,sizeof(buf1),1,fp2);gotoxy(10,15);printf(“%sn”,buf1);getch();

printf(“file haven jiemi,save now”);getche();break;}

}

}

int get_key(){ union REGS rg;rg.h.ah=0;int86(0x16,&rg,&rg);return rg.h.ah;getchar();} void box(int startx,int starty,int high,int width)/*的建立*/ { int i;gotoxy(startx,starty);putch(0xda);for(i=startx+1;i

for(i=starty+1;i

屏幕 } gotoxy(startx,starty+high-1);putch(0xc0);gotoxy(startx+1,starty+high-1);for(i=startx+1;i

通過這次的作業我覺得最大的收獲是不僅把平時學習到的知識理解的更加透徹,而且使知識更加系統化,同時還把有些平時不太注意的小問題發現了出來,這不但有利于我學習C語言,而且對于我學習任何一門課程都是很有益處的。總之,做這份作業對于我們學習C語言有很大的幫助。

在做課程設計時,由于運用了很多新知識,新的方法,還有題目更加復雜,應用性更強,在編寫過程中遇到了很多困難,從而使自己能夠學習到更多以前不懂,難懂的東西。

第五篇:計算機信息的加密與解密課程介紹

計算機信息的加密與解密課程內容提要

本課程介紹了計算機信息加密與解密的主要技術,包括下面一些內容:壓縮文件密碼技術、辦公軟件密碼技術、PKI體系、常用文件加密軟件、密碼設置技術、系統密碼技術、QQ病毒與網頁密碼和高級密碼破解技術。

隨著Iternet在全球的普及,幾乎每一臺計算機都與別的計算機相互連接。計算機網絡犯罪日益增多,技術含量越來越高,危害越來越大。信息安全已經成為社會關注的一個焦點,已經涉及國家安全的各個方面。密碼技術是衡量一個國家信息安全技術的重要標志。現代密碼學不僅用于解決信息的保密,而且也用于解決修的完整性、可用性、可控性和不可抵賴草??梢哉f信息安全的問題說到底就是密碼的問題。一方面要加強密碼學的理論和技術研究,另一方面也要普及密碼技術的應用,這樣才能提高全民族的信息安全意識和技術水平。

本課程開設的目的就在于通過介紹常用的加密解密技術,使廣大讀者對密碼技術有更加深入了了解,從而提高個人的信息安全意識和技術水平。本課程共9章,各章的主要內容如下:

第一章主要介紹最常用的.zip、.rar壓縮軟件的加密技術和密碼恢復技術,通過圖文的講解使讀者學會如何給壓縮文件加密,同時也講解了如何恢復壓縮軟件的密碼。

第二章主要介紹MS Office系列辦公文件和PDF文件的加密和密碼恢復技術。為提高恢復密碼的速度,本章還可介紹如何用密碼字典器制備字典文件以及RadHat辦公軟件的加密技術。

第三章主要介紹在PKI架構下的安全認證中心的原理和如何搭建一個基于Windows 2000 Server 的CA系統。

第四章主要介紹加密軟件的使用,包括文件加密工具、文件夾加密工具和磁盤加密工具的使用,使讀者的加密能力進一步提高。

第五章主要介紹密碼設置技術,包括簡單方法和高級變換技術在內的20多種方法,使得普通人設置強度高,易記憶的密碼成為可能。

第六章主要介紹系統密碼的設置與恢復技術。包括BIOS密碼的設置與清除,操作系統密碼的設置與清除。

第七章主要介紹了QQ木馬病毒的防治、電子郵件密碼技術和“*”號密碼查看工具的使用,主要為讀者在日常使用計算機發生問題,提供一種解決方法。

第八章主要介紹了密碼高級破解技術。其中包括Debug、Win32Adsm、UtarEdit、OliIceddv等工具的使用。

第九章主要介紹了在VC下軟件中身份認證,加密程序的編寫,以及配合使用軟件分析技術強化應用軟件的安全性。

下載基于U盤和網絡的加密解密系統word格式文檔
下載基于U盤和網絡的加密解密系統.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    RSA加密解密算法c語言程序5篇

    #include #include #include//將十進制數轉換成二進制,用于檢驗大素數p和q int zhuan_huan(int b,int a,int k) { int t,temp=-1;while(b>0){ t=b%2; temp++; a[temp]=t; b......

    常用衛星電視節目加密系統

    常用衛星電視節目加密系統 看看常用的加密系統目前國際上常見的DVB加密系統有維莎、不良詞語過濾、耐瑞唯信、恩迪斯、康奈斯、Mediaguard/Seca、PowerVu 和CryptoWorks等多......

    計算機信息的加密與解密課程介紹2

    計算機信息的加密與解密課程內容提要 本課程介紹了計算機信息加密與解密的主要技術,包括下面一些內容:壓縮文件密碼技術、辦公軟件密碼技術、PKI體系、常用文件加密軟件、密碼......

    防止u盤重要信息泄密,建議使用u盤加密軟件

    防止u盤重要信息泄密,建議使用u盤加密軟件U盤除了可以儲存數據外,還可以成為泄密的工具。U盤會交叉感染病毒。即U盤中的病毒/木馬可以傳播給電腦,電腦中的病毒/木馬同樣也會傳......

    小米手機網絡宣傳方法解密

    小米最新公布的數據顯示,其在2013年上半年的手機銷量幾乎相當于2012年全年的銷量,而營收較去年同期的9.5746億美元增長了一倍多。小米手機在本質上是一個電子商務的平臺,而其電......

    互聯網全網信息監測系統解密

    簡介 網絡輿情在政治生活秩序和社會穩定中的影響與日俱增。發生的重大網絡輿情事件讓人們認識到“互聯網”作為“社會監督工具”的重大意義,頻頻的網絡發言、社會熱點事件也......

    交通銀行批量開卡代發加密系統操作手冊

    交通銀行批量開卡代發加密系統操作手冊 1. 安裝軟件 a) 步驟一: b) 步驟二: c) 步驟三: d) 步驟四: e) 步驟五: 2. 用戶登錄 2.1 輸入正確的代發工資單位編號與密鑰 注意:用戶......

    計算機加密通信網絡使用管理規定[推薦5篇]

    計算機加密通信網絡使用管理規定為規范全區計算機加密通信網絡的使用和管理,確保安全電子郵件系統傳輸和存儲信息安全,特制定本制度。第一條 安全電子郵件系統屬于商用密碼......

主站蜘蛛池模板: 欧美大香线蕉线伊人久久| 亚欧中文字幕久久精品无码| 中国凸偷窥xxxx自由视频妇科| 国产熟妇久久777777| 天天爱天天做天天做天天吃中文| 国产成人三级一区二区在线观看一| 人人妻人人澡人人爽不卡视频| 夜夜躁狠狠躁日日躁孕妇| gv天堂gv无码男同在线观看| 久久丝袜脚交足免费播放导航| 亚洲av无码国产精品永久一区| 亚洲国产成人精品无码区99| 99国产精品国产精品九九| 成人影片一区免费观看| 亚洲中文字幕日产无码2020| 自慰无码一区二区三区| 麻豆人妻少妇精品无码专区| 无码aⅴ精品一区二区三区浪潮| 在线成人爽a毛片免费软件| 4hu四虎永久在线影院| 亚洲午夜精品一区二区| 国精产品源xzl仙踪林仙踪| 欧美熟妇精品一区二区三区| 小箩莉末发育娇小性色xxxx| 狠狠色丁香婷婷综合尤物| 国产农村乱人伦精品视频| 久久国产精品久久精品国产| 欧美交换配乱吟粗大视频| 国产午夜无码精品免费看动漫| 国产高潮刺激叫喊视频| 强被迫伦姧在线观看无码| 国产激情з∠视频一区二区| 高中生自慰www网站| 人人妻人人藻人人爽欧美一区| 一本一本久久a久久精品综合| 久久精品国产精品亚洲毛片| 少妇无码一区二区三区| 久久国产精久久精产国| 精品国产一区二区三区2021| 亚洲人成网网址在线看| 国产成人一区二区精品视频|