1. 請教http摘要認證客戶端的java實現
HttpURLConnection hc = null;
try
{
hc = (HttpURLConnection) new URL(url).openConnection();
hc.setConnectTimeout(10000);
hc.setReadTimeout(10000);
hc.setDoInput(true);
hc.setDoOutput(true);
hc.setUseCaches(false);
String content = param;
DataOutputStream out = new DataOutputStream(hc.getOutputStream());
out.writeBytes(content);
out.flush();
out.close();
//從hc中取出sessionId
for (int i = 1; (key = hc.getHeaderFieldKey(i)) != null; i++)
{
if (key.equalsIgnoreCase("Set-Cookie"))
{
sessionId = hc.getHeaderField(key);
sessionId = sessionId.substring(0, sessionId.indexOf(";"));
break;
}
}
BufferedReader reader = new BufferedReader(
new InputStreamReader(hc.getInputStream()));
String lines;
while ((lines = reader.readLine()) != null)
{
break;
}
reader.close();
catch (Exception e)
{
//
//e.printStackTrace();
return false;
}
finally
{
// 斷開連接
hc.disconnect();
}
希望能幫到你!
2. jar包 數字簽名驗證
我也需要知道這個問題的答案 有高手看到的話 指點下~~~~
簡單的Java加密演算法有:
第一種. BASE
Base是網路上最常見的用於傳輸Bit位元組代碼的編碼方式之一,大家可以查看RFC~RFC,上面有MIME的詳細規范。Base編碼可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base來將一個較長的唯一標識符(一般為-bit的UUID)編碼為一個字元串,用作HTTP表單和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,採用Base編碼具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。
第二種. MD
MD即Message-Digest Algorithm (信息-摘要演算法),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊演算法之一(又譯摘要演算法、哈希演算法),主流編程語言普遍已有MD實現。將數據(如漢字)運算為另一固定長度值,是雜湊演算法的基礎原理,MD的前身有MD、MD和MD。廣泛用於加密和解密技術,常用於文件校驗。校驗?不管文件多大,經過MD後都能生成唯一的MD值。好比現在的ISO校驗,都是MD校驗。怎麼用?當然是把ISO經過MD後產生MD的值。一般下載linux-ISO的朋友都見過下載鏈接旁邊放著MD的串。就是用來驗證文件是否一致的。
MD演算法具有以下特點:
壓縮性:任意長度的數據,算出的MD值長度都是固定的。
容易計算:從原數據計算出MD值很容易。
抗修改性:對原數據進行任何改動,哪怕只修改個位元組,所得到的MD值都有很大區別。
弱抗碰撞:已知原數據和其MD值,想找到一個具有相同MD值的數據(即偽造數據)是非常困難的。
強抗碰撞:想找到兩個不同的數據,使它們具有相同的MD值,是非常困難的。
MD的作用是讓大容量信息在用數字簽名軟體簽署私人密鑰前被」壓縮」成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的十六進制數字串)。除了MD以外,其中比較有名的還有sha-、RIPEMD以及Haval等。
第三種.SHA
安全哈希演算法(Secure Hash Algorithm)主要適用於數字簽名標准(Digital Signature Standard DSS)裡面定義的數字簽名演算法(Digital Signature Algorithm DSA)。對於長度小於^位的消息,SHA會產生一個位的消息摘要。該演算法經過加密專家多年來的發展和改進已日益完善,並被廣泛使用。該演算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),並把它們轉化為長度較短、位數固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。散列函數值可以說是對明文的一種「指紋」或是「摘要」所以對散列值的數字簽名就可以視為對此明文的數字簽名。
SHA-與MD的比較
因為二者均由MD導出,SHA-和MD彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:
對強行攻擊的安全性:最顯著和最重要的區別是SHA-摘要比MD摘要長 位。使用強行技術,產生任何一個報文使其摘要等於給定報摘要的難度對MD是^數量級的操作,而對SHA-則是^數量級的操作。這樣,SHA-對強行攻擊有更大的強度。
對密碼分析的安全性:由於MD的設計,易受密碼分析的攻擊,SHA-顯得不易受這樣的攻擊。
速度:在相同的硬體上,SHA-的運行速度比MD慢。
第四種.HMAC
HMAC(Hash Message Authentication Code,散列消息鑒別碼,基於密鑰的Hash演算法的認證協議。消息鑒別碼實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,然後傳輸。接收方利用與發送方共享的密鑰進行鑒別認證等。
4. 國家標准怎麼認定生產軟體程序需要符合國家哪些標准
摘要 軟體開發要的是實際技能,沒有國家標准。
5. 誰有關於網路安全地資料啊
網路安全復習資料
第1-2章
1、 計算機網路定義(P1)
答:凡將地理位置不同的具有獨立功能的計算機系統通過學習設備和通信線路連接起來,在網路軟體支持下進行數據通信,資源共享和協同工作的系統。
2、 網路安全的五個屬性(P2)
答:1、可用性。 可用性是指得到授權的屍體在需要時可以使用所需要的網路資源和服務。
2、機密性。 機密性是指網路中的信息不被非授權實體(包括用戶和進程等)獲取與使用。
3、完整性。 完整性是指網路真實可信性,即網路中的信息不會被偶然或者蓄意地進行刪除、修改、偽造、插入等破壞,保證授權用戶得到的信息是真實的。
4、可靠性。 可靠性是指系統在規定的條件下和規定的時間內,完成規定功能的概率。
5、不可抵賴性。 不可抵賴性也稱為不可否認性。是指通信的雙方在通信過程中,對於自己所發送或接受的消息不可抵賴。
3、 網路安全威脅定義(P2)
答:所謂網路安全威脅是指某個實體(人、時間、程序等)對某一網路資源的機密性、完整性、可用性及可靠性等可能造成的危害。
4、 哪種威脅是被動威脅(P3)
答:被動威脅只對信息進行監聽,而不對其修改和破壞。
5、 安全威脅的主要表現形式(P4)
答:授權侵犯:為某一特定目標的被授權使用某個系統的人,將該系統用作其他未授權的目的。
旁路控制:攻擊者發掘系統的缺陷或佔全弱點,從而滲入系統。
拒絕服務:合法訪問被無條件拒絕和推遲。
竊聽:在監視通信的過程中獲得信息。
電磁泄露:信息泄露給未授權實體。
完整性破壞:對數據的未授權創建、修改或破壞造成數據一致性損害。
假冒:一個實體假裝成另外一個實體。
物理入侵:入侵者繞過物理控制而獲得對系統的訪問權。
重放:出於非法目的而重新發送截獲的合法通信數據的拷貝。
否認:參與通信的一方時候都認曾經發生過此次通信。
資源耗盡:某一資源被故意超負荷使用,導致其他用戶的服務被中斷。
業務流分析:通過對業務流模式進行觀察(有、無、數量、方向、頻率),而使信息泄露給未授權實體。
特洛伊木馬:含有覺察不出或無害程序段的軟體,當他被運行時,會損害用戶的安全。
陷門:在某個系統或文件中預先設置的「機關」,使得當提供特定的輸入時,允許違反安全策略。
人員疏忽:一個授權的人出於某種動機或由於粗心講信息泄露給未授權的人。
6、 什麼是重放(P4)
答:出於非法目的而重新發送截獲的合法通信數據的拷貝。
7、 什麼是陷門(P4)
答:在某個系統或文件中預先設置的「機關」,使得當提供特定的輸入時,允許違反安全策略。
8、 網路安全策略包括哪4方面(P6)
答:物理安全策略、訪問控制策略、信息加密策略、安全管理策略。
9、 安全訪問策略就是一組用於確認主體是否對客體具有訪問許可權的規則。
10、 P2DR模型的4部分,它的基本思想(P8)
答:P2DR模型包括4個主要部分,分別是:Policy—策略,Protection—保護,Detection—檢測,Response—響應。
P2DR模型的基本思想是:一個系統的安全應該在一個統一的安全策略的控制和指導下,綜合運用各種安全技術(如防火牆、操作系統身份認證、加密等手段)對系統進行保護,同時利用檢測工具(如漏洞評估、入侵檢測等系統)來監視和評估系統的安全狀態,並通過適當的響應機制來將系統調整到相對「最安全」和「風險最低」的狀態。
11、 PDRR模型的4部分(P10)
答:Protection(防護)、Detection(檢測)、Response(響應)、Recovery(恢復)。
12、 TCP/IP參考模型,各層的名稱、作用、主要協議(P16)
答:TCP/IP參考模型共有四層,從上至下分別為:應用層、傳輸層、網路層及網路介面層。
(1)、應用層:大致對應OSI的表示層、會話層、應用層,是TCP/IP模型的最上層,是面向用戶的各種應用軟體,是用戶訪問網路的界面,包括一些想用戶提供的常用應用程序,如電子郵件、Web瀏覽器、文件傳輸、遠程登錄等,也包括用戶在傳輸層智商建立的自己應用程序。
(2)、傳輸層:對應OSI的傳輸層。負責實現源主機和目的主機上的實體之間的通信。它提供了兩種服務:一種是可靠的、面向連接的服務(TCP協議);一種是無連接的數據報服務(UDP協議)。為了實現可靠傳輸,要在會話時建立連接,對數據進行校驗和手法確認,通信完成後再拆除連接。
(3)、網路層:對應OSI的網路層,負責數據包的路由選擇功能,保證數據包能順利到達指定的目的地。一個報文的不同分組可能通過不同的路徑到達目的地,因此要對報文分組加一個順序標識符,以使目標主機接受到所有分組後,可以按序號將分組裝配起來,恢復原報文。
(4)、網路介面層:大致對應OSI的數據鏈路層和物理層,是TCP/IP模型的最低層。它負責接受IP數據包並通過網路傳輸介質發送數據包。
13、 常用網路服務有哪些,它們的作用。(P35)
答:(1)、Telnet:Telnet是一種網際網路遠程終端訪問服務。它能夠以字元方式模仿遠程終端,登錄遠程伺服器,訪問伺服器上的資源。
(2)、FTP:文件傳輸協議FTP的主要作用就是讓用戶連接上一個遠程計算機(這些計算機上運行著FTP伺服器程序)查看遠程計算機有哪些文件,然後把文件從遠程計算機上下載到本地計算機,或把本地計算機的文件上傳到遠程計算機去。
(3)、E-Mail:它為用戶提供有好的互動式界面,方便用戶編輯、閱讀、處理信件。
(4)、WWW:用戶通過瀏覽器可以方便地訪問Web上眾多的網頁,網頁包含了文本、圖片、語音、視頻等各種文件。
(5)、DNS:用於實現域名的解析,即尋找Internet域名並將它轉化為IP地址。
14、 安全訪問策略就是一組用於確認主體是否對客體具有訪問許可權的規則。
答:
15、 IP頭結構(P31)
答:IP頭+數據,IP頭有一個20位元組的固定長度部分和一個可選任意長度部分。
16、 TCP頭結構(P33)
答:埠源,目的埠,順序號,確認號,頭長度
17、 ping 指令的功能(P41)
答:ping命令用來檢測當前主機與目的主機之間的連通情況,它通過從當前主機向目的主機發送ICMP包,並接受應答信息來確定兩台計算機之間的網路是否連通,並可顯示ICMP包到達對方的時間。當網路運行中出現故障時,利用這個實用程序來預測故障和確定故障源是非常有效的。
18、 ftp命令中上傳和下載指令分別是什麼。(P48)
答:put:上傳文件到遠程伺服器。
get:下載文件到本地機器。
19、 怎麼利用Tracert指令來確定從一個主機到其他主機的路由。(P44)
答:通過向目標發送不同IP生存時間值的ICMP數據包,Tracert診斷程序確定到目標所採取的路由。
第3-4章
20、 什麼是基於密鑰的演算法(P52)
答:密碼體制的加密、解密演算法是公開的,演算法的可變參數(密鑰)是保密的,密碼系統的安全性僅依賴於密鑰的安全性,這樣的演算法稱為基於密鑰的演算法。
21、 什麼是對稱加密演算法、非對稱加密演算法(P54)
答:對稱加密演算法(Synmetric Algorithm),也稱為傳統密碼演算法,其加密密鑰與解密密鑰相同或很容易相互推算出來,因此也稱之為秘密密鑰演算法或單鑰演算法。
非對稱演算法(Asynmetric Algorithm)也稱公開密鑰演算法(Public Key Algorithm),是Whifield Diffie和Martin Hellman於1976年發明的,Ralph Merkle 也獨立提出了此概念。
22、 對DES、三重DES進行窮舉攻擊,各需要多少次。(P68)
答: 2的112平方 和2的64平方 (數學表達方式)
23、 給定p、q、e、M,設計一個RSA演算法,求公鑰、私鑰,並利用RSA進行加密和解密(P74)
答:公鑰:n=P*q e=(p-1)(q-1)私鑰d:e『e右上角有個-1』((mod(p-1)(q-1)))加密c=m『右上角有e』(mod n) 解密 m=c『右上角有d』(mod n)
24、 使用對稱加密和仲裁者實現數字簽名的步驟(P87)
答:A用Kac加密准備發給B的消息M,並將之發給仲裁者,仲裁者用Kac解密消息,仲裁者把這個解密的消息及自己的證明S用Kac加密,仲裁者把加密消息給B,B用於仲裁者共享的密鑰Kac解密收到的消息,就可以看到來自於A的消息M來自仲裁者的證明S。
25、 使用公開密鑰體制進行數字簽名的步驟(P88)
答:A用他的私人密鑰加密消息,從而對文件簽名;A將簽名的消息發送給B;B用A的公開密鑰解消息,從而驗證簽名。
26、 使用公開密鑰體制與單向散列函數進行數字簽名的步驟(P89)
答:A使消息M通過單向散列函數H,產生散列值,即消息的指紋或稱消息驗證碼,A使用私人密鑰對散列值進行加密,形成數字簽名S,A把消息與數字簽名一起發給B,B收到消息和簽名後,用A的公開密鑰解密數字簽名S,再用同樣的演算法對消息運算生成算列值,B把自己生成的算列值域解密的數字簽名相比較。看是否匹配,從而驗證簽名。
27、 Kerberos定義。(P89)
答:Kerberos是為了TCP/IP網路設計的基於對稱密碼體系的可信第三方鑒別協議,負責在網路上進行可信仲裁及會話密鑰的分配。
28、 PKI定義(P91)
答:PLI就是一個用公鑰概念和技術實現的,為網路的數據和其他資源提供具有普適性安全服務的安全基礎設施。所有提供公鑰加密和數字簽名服務的系統都可以叫做PKI系統。
第5-7章
29、 Windows 2000 身份認證的兩個過程是(P106)
答:互動式登錄和網路身份認證。
30、 Windows 2000中用戶證書主要用於驗證消息發送者的SID(P107)
31、 Windows 2000安全系統支持Kerberos V5、安全套接字層/傳輸層安全(SSL/TLS)和NTLM三種身份認證機制(P107)
32、 Windows 2000提供哪些功能確保設備驅動程序和系統文件保持數字簽名狀態(P109)
答:Windows文件保護,系統文件檢查程序,文件簽名驗證。
33、 WINDOWS主機推薦使用的文件系統格式是NTFS
34、 使用文件加密系統對文件進行解密的步驟。(P113)
答:要解密一個文件,首先要對文件加密密鑰進行解密,當用戶的私鑰與這個公鑰匹配時,文件加密密鑰進行解密,用戶並不是唯一能對文件加密密鑰進行解密的人,當文件加密密鑰被解密後,可以被用戶或恢復代理用於文件資料的解密。
35、 常見的Web服務安全威脅有哪些(P128)
答:(1)、電子欺騙:是指以未經授權的方式模擬用戶或進程。
(2)、篡改:是指在未經授權的情況下更改或刪除資源。
(3)、否認:否認威脅是指隱藏攻擊的證據。
(4)、信息泄露:僅指偷竊或泄露應該保密的信息。
(5)、拒絕服務:「拒絕服務」攻擊是指故意導致應用程序的可用性降低。
(6)、特權升級:是指使用惡意手段獲取比正常分配的許可權更多的許可權。
36、 CGI提供了動態服務,可以在用戶和Web伺服器之間互動式通信(P129)
37、 JavaScript存在的5個主要的安全漏洞。(P131)
答:(1)、JavaScript可以欺騙用戶,將用戶的本地硬碟上的文件上載到Intemet上的任意主機。
(2)、JavaScript能獲得用戶本地硬碟上的目錄列表,這既代表了對隱私的侵犯又代表了安全風險。
(3)、JavaScript能監視用戶某時間內訪問的所有網頁,捕捉URL並將它們傳到Internet上的某台主機中。
(4)、JavaScript能夠觸發Netscape Navigator送出電子郵件信息而不需經過用戶允許。
(5)、嵌入網頁的JavaScript代碼是功蓋的,缺乏安全保密功能。
38、 什麼是Cookies,使用Cookies有什麼安全隱患。(P132)
答:Cookies是Netscape公司開發的一種機制,用來改善HTTP協議的無狀態性。
39、 IIS的安全配置主要包括哪幾個內容(P133)
答:(1)、刪除不必要的虛擬目錄。
(2)、刪除危險的IIS組件。
(3)、為IIS中的文件分類設置許可權。
(4)、刪除不必要的應用程序映射。
(5)、保護日誌安全。
40、 SSL結構,包括SSL協議的層次,主要作用(P142)
答:SSL協議位於TCP/IP協議與各種應用層協議之間,為數據通訊提供安全支持。SSL協議可分為兩層: SSL記錄協議(SSL Record Protocol):它建立在可靠的傳輸協議(如TCP)之上,為高層協議提供數據封裝、壓縮、加密等基本功能的支持。 SSL握手協議(SSL Handshake Protocol):它建立在SSL記錄協議之上,用於在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密演算法、交換加密密鑰等。 SSL協議提供的服務主要有: 1)認證用戶和伺服器,確保數據發送到正確的客戶機和伺服器; 2)加密數據以防止數據中途被竊取; 3)維護數據的完整性,確保數據在傳輸過程中不被改變。
41、 SSL會話通過握手協議來創建(P143)
42、 什麼是SET,它主要提供哪三種服務(P153)
答:SET本身不是支付系統,而使一個安全協議和規范的集合,是使用戶能夠在網路上以一種安全的方式應用信用卡支付的基礎設施。
主要提供的三種服務:(1)、在參與交易的各方之間提供安全的通信通道。
(2)、使用X.509v3證書為用戶提供一種信任機制。
(3)、保護隱私信息,這些信息只有在必要的時間和地點才可以由當事人雙方使用。
43、 SET的參與者(P154)
答:(1)、持卡人(顧客)。 (2)、商家。 (3)、發卡機構。 (4)、代理商。 (5)、支付網關。 (6)、證書權威。
44、 SET協議使用SHA-1散列碼和RSA數字簽名來提供消息完整性(P154)
45、 SET協議使用X.509v3和RSA數字簽名來提供持卡人賬戶認證(P154)
46、 雙重簽名機制的主要特點:雙重簽名機制可以巧妙的把發送給不同接受者的兩條消息聯系起來,而又很好的保護了消費者的隱私(P155)
47、 電子郵件不是一種「端到端」的服務,而是被稱為「存儲轉發」服務。(P157)
48、 郵件網關的功能(P158)
答:(1)、預防功能。能夠保護機密信息,防止郵件泄密造成公司的損失,用戶可以理由郵件的接收者、發送者、標題、附件和正文來定製郵件的屬性。
(2)、監控功能。快速識別和監控無規則的郵件,減少公司員工不恰當使用E-mail,防止垃圾郵件阻塞郵件伺服器。
(3)、跟蹤功能。軟體可以跟蹤公司的重要郵件,它可以按接收者、發送者、標題、附件和日期搜索。郵件伺服器可以作為郵件資料庫,可以打開郵件附件也可以存儲到磁碟上。
(4)、郵件備份。可以根據日期和文件做郵件備份,並且可以輸出到便利的存儲器上整理歸檔。如果郵件伺服器出現問題,則郵件備份系統可以維持普通的郵件功能防止丟失郵件。
49、 根據用途,郵件網關可分為哪三種(P158)
答:根據郵件網關的用途可將其分成:普通郵件網關、郵件過濾網關和反垃圾郵件網關。
50、 SMTP協議與POP3協議的區別:SMTP協議用於郵件伺服器之間傳送郵件,POP3協議用於用戶從郵件伺服器上把郵件存儲到本地主機。(P159)
答:
51、 什麼是電子郵件「欺騙」(P161)
答:電子郵件欺騙是在電子郵件中改變名字,使之看起來是從某地或某人發出來的行為。
52、 進行電子郵件欺騙的三種基本方法(P161)
答:(1)、相似的電子郵件地址;
(2)、修改郵件客戶;
(3)、遠程登錄到25埠。
53、 PGP通過使用加密簽字實現安全E-mai(P166)
54、 PGP的三個主要功能(P166)
答:(1)、使用強大的IDEA加密演算法對存儲在計算機上的文件加密。經加密的文件只能由知道密鑰的人解密閱讀。
(2)、使用公開密鑰加密技術對電子郵件進行加密。經加密的電子郵件只有收件人本人才能解密閱讀。
(3)、使用公開密鑰加密技術對文件或電子郵件做數字簽名,鑒定人可以用起草人的公開密鑰鑒別真偽。
第8-10章
55、 防火牆定義(P179)
答:網路術語中所說的防火牆(Firewall)是指隔離在內部網路與外部網路之間的一道防禦系統,它能擋住來自外部網路的攻擊和入侵,保障內部網路的安全。
56、 什麼是數據驅動攻擊(P180)
答:入侵者把一些具有破壞性的數據藏匿在普通數據中傳送到Internet主機上,當這些數據被激活時就會發生數據驅動攻擊。
57、 防火牆的功能(P181)
答:(1)、可以限制未授權用戶進入內部網路,過濾掉不安全服務和非法用戶。
(2)、防止入侵者接近內部網路的防禦設施,對網路攻擊進行檢測和告警。
(3)、限制內部用戶訪問特殊站點。
(4)、記錄通過防火牆的信息內容和活動,為監視Internet安全提供方便。
58、 防火牆應的特性(P181)
答:(1)、所有在內部網路和外部網路之間傳輸的數據都必須通過防火牆。
(2)、只有被授權的合法數據,即防火牆安全策略允許的數據,可以通過防火牆。
(3)、防火牆本身具有預防入侵的功能,不受各種攻擊的影響。
(4)、人機界面良好,用戶配置實用方便,易管理。系統管理員可以方便地對防火牆進行設置,對Internet的訪問者、被訪問者、訪問協議以及訪問方式進行控制。
59、 防火牆的缺點(P182)
答:(1)、不能防範惡意的內部用戶。
(2)、不能防範不通過防火牆的連接。
(3)、不能防範全部的威脅。
(4)、防火牆不能防範病毒。
60、 防火牆技術主要有包過濾防火牆和代理伺服器(P182)
61、 包過濾防火牆的定義(P182)
答:包過濾防火牆又稱網路層防火牆,它對進出內部網路的所有信息進行分析,並按照一定的信息過濾規則對信息進行限制,允許授權信息通過,拒絕非授權信息通過。
62、 包過濾的定義(P183)
答:包過濾(Packet Filtering)急速在網路層中對數據包實施有選擇的通過,依據系統事先設定好的過濾規則,檢查數據流中的每個包,根據包頭信息來確定是否允許數據包通過,拒絕發送可疑的包。
63、 包過濾防火牆的優點(P183)
答:(1)、一個屏蔽路由器能保護整個網路。
(2)、包過濾對用戶透明。
(3)、屏蔽路由器速度快、效率高。
64、 包過濾型防火牆工作在網路層(P183)
65、 三種常見的防火牆體系結構(P187)
答:(1)、雙重宿主主機結構。 (2)、屏蔽主機結構。 (3)、屏蔽子網結構。
66、 屏蔽主機結構由什麼組成(P188)
答:屏蔽主機結構需要配備一台堡壘主機和一個有過濾功能的屏蔽路由器。
67、 分布式防火牆的優點(P192)
答:(1)、增強的系統安全性。
(2)、提高了系統性能。
(3)、系統的擴展性。
(4)、應用更為廣泛,支持VPN通信。
68、 病毒的定義(P199)
答:計算機病毒是指編制或者在計算機程序中插入的破壞計算機功能或者破壞數據,影響計算機使用並且能夠自我復制的一組計算機指令或者程序代碼。
69、 病毒的生命周期(P200)
答:隱藏階段、觸發階段、執行階段。
70、 病毒的特徵(P201)
答:(1)、傳染性:傳染性是病毒的基本特徵。
(2)、破壞性:所有的計算機病毒都是一種可執行程序,而這一執行程序又不然要運行,所以對系統來講,病毒都存在一個共同的危害,即佔用系統資源、降低計算機系統的工作效率。
(3)、潛伏性:一個編制精巧的計算機病毒程序,進入系統之後一般不會馬上發作,可以在幾周或者幾個月內隱藏在合法文件中,對其他系統進行傳染,而不被人發現。
(4)、可執行性:計算機病毒與其他合法程序一樣,是一段可執行性程序,但常常不是一個完整的程序,而使寄生在其他可執行程序中的一段代碼。
(5)、可觸發性:病毒因某個時間或數值的出現,誘使病毒實施感染或進行攻擊的特性稱為可觸發性。
(6)、隱蔽性:病毒一般是具有很高編程技巧、短小精悍的程序。如果不經過代碼分析,感染了病毒的程序與正常程序是不容易區別的。
71、 病毒的分類,蠕蟲病毒屬於一種網路病毒,CIH屬於文件型病毒(P202)
72、 病毒的主要傳播途徑(P203)
答:(1)、通過移動儲存設備來傳播。
(2)、網路傳播。
(3)、無線傳播。
73、 蠕蟲病毒的基本程序結構包括哪些模塊(P209)
答:(1)、傳播模塊:負責蠕蟲的傳播。傳播模塊又可以分為三個基本模塊:掃描模塊、攻擊模塊和復制模塊。
(2)、隱藏模塊:侵入主機後,隱藏蠕蟲程序,防止被用戶發現。
(3)、目的功能模塊:實現對計算機的控制、監視或破壞等功能。
74、 木馬(通過植入用戶的計算機,獲取系統中的有用數據)、蠕蟲(P208)、網頁病毒(P203)各有什麼特點即它們各自定義。
答:木馬:通過植入用戶的計算機,獲取系統中的有用數據。
蠕蟲:是一種通過網路傳播的惡性病毒。
網頁病毒:也稱網頁惡意代碼,是指網頁中JavaApplet,JavaScript或者ActiveX設計的非法惡意程序。
第11-12章
75、 獲取口令的常用方法(P225)
答:(1)、通過網路監聽非法得到用戶口令。
(2)、口令的窮舉攻擊。
(3)、利用系統管理員的失誤。
76、 埠掃描器通常分為哪三類(P227)
答:資料庫安全掃描器、操作系統安全掃描器和網路安全掃描器。
77、 埠掃描技術包括(P228)
答:(1)、TCPconnect()掃描。
(2)、TCP SYN掃描。
(3)、TCP FIN掃描。
(4)、IP段掃描。
(5)、TCP反向ident掃描。
(6)、FTP返回攻擊。
(7)、UDP ICMP埠不能到達掃描。
(8)、ICMP echo掃描。
78、 如何發現Sniffer(P230)
答:(1)、網路通信掉包率特別高。
(2)、網路寬頻出現異常。
(3)、對於懷疑運行監聽程序的主機,用正確的IP地址和錯誤的物理地址去PING,正常的機器不接收錯誤的物理地址,出於監聽狀態的機器能接收,這種方法依賴系統的IPSTACK,對有些系統可能行不通。
(4)、往網上發送大量包含不存在的物理地址的包,由於監聽程序要處理這些包,將導致性能下降,通過比較前後該機器的性能(Icmp Echo Delay等方法)加以判斷。
(5)、另外,目前也有許多探測sniffer的應用程序可以用來幫助探測sniffer,如ISS的anti-Sniffer、Sentinel、Lopht的Antisniff等。
79、 防禦網路監聽的方法(P231)
答:(1)、從邏輯上火物理上對網路分段。
(2)、以交換式集線器代替共享式集線器。
(3)、使用加密技術。
(4)、劃分VLAN。
80、 什麼是拒絕服務攻擊(P233)
答:拒絕服務攻擊是指一個用戶占據了大量的共享資源,使系統沒有剩餘的資源給其他用戶提供服務的一種攻擊方式。
81、 分布式拒絕服務攻擊體系包括哪三層(P234)
答:(1)、攻擊者:攻擊者所用的計算機是攻擊主控台,可以是網路上的任何一台主機,甚至可以是一個活動的便攜機。攻擊者操縱整個攻擊過程,它向主控端發送攻擊命令。
(2)、主控端:主控端是攻擊者非法入侵並控制的一些主機,這些主機還分別控制大量 的代理主機。主控端主機的上面安裝了特定的程序,因此它們可以接受攻擊者發來的特殊指令,並且可以把這些命令發送到代理主機上。
(3)、代理端:代理端同樣也是攻擊者入侵並控制的一批主機,在它們上面運行攻擊器程序,接受和運行主控端發來的命令。代理端主機是攻擊的執行者,由它向受害者主機實際發起進攻。
82、 木馬入侵原理(P236)
配置木馬,傳播木馬,運行木馬,信息泄露,建立連接,遠程式控制制。
83、 入侵檢測定義(P241)
答:入侵檢測(Intrusion Detection),顧名思義,即是對入侵行為的發覺。進行入侵檢測的軟體與硬體的組合便是入侵檢測系統(Intrusion Detection System,IDS)。
84、 入侵檢測過程包括信息收集和信號分析(P243)
85、 入侵檢測過程中的三種信號分析方法(P243)
答:(1)、模式匹配的方法:模式匹配就是將收集到的信息與已知的網路入侵和系統誤用模式資料庫進行比較,從而發現違背安全策略的行為。這種分析方法也稱為誤用檢測。
(2)、統計分析的方法:統計分析方法首先給系統對象(如用戶、文件、目錄和設備等)創建一個統一描述,統計正常使用時的一些測量屬性(如訪問次數、操作失敗次數和延時等)。
(3)、完整性分析的方法:完整性分析主要關注某個文件或對象是否被更改,這經常包括文件和目錄的內容及屬性的變化。
86、 按照數據來源,入侵檢測系統可分為哪三種(P244)
答:(1)、基於主機的入侵檢測系統。
(2)、基於網路的入侵檢測系統。
(3)、採用上述兩種數據來源的分布式的入侵檢測系統。
87、 什麼是模式匹配方法(P244)
答:模式匹配就是將收集到的信息與已知的網路入侵和系統誤用模式資料庫進行比較,從而發現違背安全策略的行為。這種分析方法也稱為誤用檢測。
88、 基於網路的入侵檢測系統的組成(P246)
答:網路安全資料庫,安全配置機構,探測器,分析引擎。
89、 網路管理有哪五大功能(P258)
答:配置管理(Configuration Management)、性能管理(Performance Management)、故障管理(Fault Management)、計費管理(Accounting Management)、安全管理(Security Management)。
90、 OSI系統的管理結構(P262)
答:管理系統中的代理實現被管理對象的訪問,被管理對象資源的感念性存儲稱為管理信息庫,管理者和代理之間使用OSI通信協議再進行通信,其中CMIP是網路管理的應用層協議,在OSI網路管理中起關鍵作用
91、 TCP/IP網路中應用最為廣泛的網路管理協議是SNMP。(P264)
92、 網路管理體系結構的三種模型(P293)
答:集中式體系結果、分層式體系結構、分布式體系結構。
6. 分享Java常用幾種加密演算法
簡單的Java加密演算法有:
第一種. BASE
Base是網路上最常見的用於傳輸Bit位元組代碼的編碼方式之一,大家可以查看RFC~RFC,上面有MIME的詳細規范。Base編碼可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base來將一個較長的唯一標識符(一般為-bit的UUID)編碼為一個字元串,用作HTTP表單和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,採用Base編碼具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。
第二種. MD
MD即Message-Digest Algorithm (信息-摘要演算法),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊演算法之一(又譯摘要演算法、哈希演算法),主流編程語言普遍已有MD實現。將數據(如漢字)運算為另一固定長度值,是雜湊演算法的基礎原理,MD的前身有MD、MD和MD。廣泛用於加密和解密技術,常用於文件校驗。校驗?不管文件多大,經過MD後都能生成唯一的MD值。好比現在的ISO校驗,都是MD校驗。怎麼用?當然是把ISO經過MD後產生MD的值。一般下載linux-ISO的朋友都見過下載鏈接旁邊放著MD的串。就是用來驗證文件是否一致的。
MD演算法具有以下特點:
壓縮性:任意長度的數據,算出的MD值長度都是固定的。
容易計算:從原數據計算出MD值很容易。
抗修改性:對原數據進行任何改動,哪怕只修改個位元組,所得到的MD值都有很大區別。
弱抗碰撞:已知原數據和其MD值,想找到一個具有相同MD值的數據(即偽造數據)是非常困難的。
強抗碰撞:想找到兩個不同的數據,使它們具有相同的MD值,是非常困難的。
MD的作用是讓大容量信息在用數字簽名軟體簽署私人密鑰前被」壓縮」成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的十六進制數字串)。除了MD以外,其中比較有名的還有sha-、RIPEMD以及Haval等。
第三種.SHA
安全哈希演算法(Secure Hash Algorithm)主要適用於數字簽名標准(Digital Signature Standard DSS)裡面定義的數字簽名演算法(Digital Signature Algorithm DSA)。對於長度小於^位的消息,SHA會產生一個位的消息摘要。該演算法經過加密專家多年來的發展和改進已日益完善,並被廣泛使用。該演算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),並把它們轉化為長度較短、位數固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。散列函數值可以說是對明文的一種「指紋」或是「摘要」所以對散列值的數字簽名就可以視為對此明文的數字簽名。
SHA-與MD的比較
因為二者均由MD導出,SHA-和MD彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:
對強行攻擊的安全性:最顯著和最重要的區別是SHA-摘要比MD摘要長 位。使用強行技術,產生任何一個報文使其摘要等於給定報摘要的難度對MD是^數量級的操作,而對SHA-則是^數量級的操作。這樣,SHA-對強行攻擊有更大的強度。
對密碼分析的安全性:由於MD的設計,易受密碼分析的攻擊,SHA-顯得不易受這樣的攻擊。
速度:在相同的硬體上,SHA-的運行速度比MD慢。
第四種.HMAC
HMAC(Hash Message Authentication Code,散列消息鑒別碼,基於密鑰的Hash演算法的認證協議。消息鑒別碼實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,然後傳輸。接收方利用與發送方共享的密鑰進行鑒別認證等。
7. java最常用的幾種加密演算法
簡單的Java加密演算法有:
第一種. BASE
Base是網路上最常見的用於傳輸Bit位元組代碼的編碼方式之一,大家可以查看RFC~RFC,上面有MIME的詳細規范。Base編碼可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base來將一個較長的唯一標識符(一般為-bit的UUID)編碼為一個字元串,用作HTTP表單和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,採用Base編碼具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。
第二種. MD
MD即Message-Digest Algorithm (信息-摘要演算法),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊演算法之一(又譯摘要演算法、哈希演算法),主流編程語言普遍已有MD實現。將數據(如漢字)運算為另一固定長度值,是雜湊演算法的基礎原理,MD的前身有MD、MD和MD。
MD演算法具有以下特點:
壓縮性:任意長度的數據,算出的MD值長度都是固定的。
容易計算:從原數據計算出MD值很容易。
抗修改性:對原數據進行任何改動,哪怕只修改個位元組,所得到的MD值都有很大區別。
弱抗碰撞:已知原數據和其MD值,想找到一個具有相同MD值的數據(即偽造數據)是非常困難的。
強抗碰撞:想找到兩個不同的數據,使它們具有相同的MD值,是非常困難的。
MD的作用是讓大容量信息在用數字簽名軟體簽署私人密鑰前被」壓縮」成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的十六進制數字串)。除了MD以外,其中比較有名的還有sha-、RIPEMD以及Haval等。
第三種.SHA
安全哈希演算法(Secure Hash Algorithm)主要適用於數字簽名標准(Digital Signature Standard DSS)裡面定義的數字簽名演算法(Digital Signature Algorithm DSA)。對於長度小於^位的消息,SHA會產生一個位的消息摘要。該演算法經過加密專家多年來的發展和改進已日益完善,並被廣泛使用。該演算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),並把它們轉化為長度較短、位數固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。散列函數值可以說是對明文的一種「指紋」或是「摘要」所以對散列值的數字簽名就可以視為對此明文的數字簽名。
SHA-與MD的比較
因為二者均由MD導出,SHA-和MD彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:
對強行攻擊的安全性:最顯著和最重要的區別是SHA-摘要比MD摘要長 位。使用強行技術,產生任何一個報文使其摘要等於給定報摘要的難度對MD是^數量級的操作,而對SHA-則是^數量級的操作。這樣,SHA-對強行攻擊有更大的強度。
對密碼分析的安全性:由於MD的設計,易受密碼分析的攻擊,SHA-顯得不易受這樣的攻擊。
速度:在相同的硬體上,SHA-的運行速度比MD慢。
第四種.HMAC
HMAC(Hash Message Authentication Code,散列消息鑒別碼,基於密鑰的Hash演算法的認證協議。消息鑒別碼實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,然後傳輸。接收方利用與發送方共享的密鑰進行鑒別認證等。
8. 學軟體開發好找工作么
學電腦不如學【視頻剪輯】,理由很簡單,容易學(不像其它行業學習成本高,難度大),適合短期3-4個月短期學習,而且行業缺口非常大,無論是找工作還是自己在家裡接私單,月收入輕松過萬,兩三萬也是稀鬆平常。【點擊進入】免費「短視頻剪輯後期」學習網址:
www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=313&zdhhr-11y17r-756472176523310964
因為現在【短視頻】的崛起,任何企業,任何工作室或者個人都需要製作剪輯大量的短視頻來包裝品牌,發抖音,發朋友圈,發淘寶等自媒體渠道做展示。因為每天都要更新並發布新內容,所以剪輯師根本招不夠,,供需失衡就造成了剪輯師高薪水。
而且剪輯這個技術並不需要高超的電腦技術,也不需要美術音樂造詣,基本都是固定套路,要什麼風格的片要什麼節奏,經過三四個月的培訓都可以輕松掌握。但凡有點電腦基礎會用滑鼠拖拽,會點擊圖標,會保存除非自己不想學,沒有學不會的。但是要學好學精,就一定要找專業負責的培訓機構了,推薦這個領域的老大:王氏教育。
在「短視頻剪輯/短視頻運營/視頻特效」處理這塊,【王氏教育】是國內的老大,每個城市都是總部直營校區。跟很多其它同類型大機構不一樣的是:王氏教育每個校區都是實體面授,老師是手把手教,而且有專門的班主任從早盯到晚,爆肝式的學習模式,提升會很快,特別適合0基礎的學生。王氏教育全國直營校區面授課程試聽【復制後面鏈接在瀏覽器也可打開】: www.huixueba.com.cn/school/yingshi?type=2&zdhhr-11y17r-756472176523310964
大家可以先把【繪學霸】APP下載到自己手機,方便碎片時間學習——繪學霸APP下載: www.huixueba.com.cn/Scripts/download.html
9. 基於java語言的數字簽名
Java加密和數字簽名編程快速入門
本文主要談一下密碼學中的加密和數字簽名,以及其在java中如何進行使用。對密碼學有興趣的夥伴,推薦看Bruce Schneier的著作:Applied Crypotography。在jdk1.5的發行版本中安全性方面有了很大的改進,也提供了對RSA演算法的直接支持,現在我們從實例入手解決問題(本文僅是作為簡單介紹):
一、密碼學上常用的概念
1)消息摘要:
這是一種與消息認證碼結合使用以確保消息完整性的技術。主要使用單向散列函數演算法,可用於檢驗消息的完整性,和通過散列密碼直接以文本形式保存等,目前廣泛使用的演算法有MD4、MD5、SHA-1,jdk1.5對上面都提供了支持,在java中進行消息摘要很簡單, java.security.MessageDigest提供了一個簡易的操作方法:
/**
*MessageDigestExample.java
*Copyright 2005-2-16
*/
import java.security.MessageDigest;
/**
*單一的消息摘要演算法,不使用密碼.可以用來對明文消息(如:密碼)隱藏保存
*/
public class MessageDigestExample{
public static void main(String[] args) throws Exception{
if(args.length!=1){
System.err.println("Usage:java MessageDigestExample text");
System.exit(1);
}
byte[] plainText=args[0].getBytes("UTF8");
//使用getInstance("演算法")來獲得消息摘要,這里使用SHA-1的160位演算法
MessageDigest messageDigest=MessageDigest.getInstance("SHA-1");
System.out.println("\n"+messageDigest.getProvider().getInfo());
//開始使用演算法
messageDigest.update(plainText);
System.out.println("\nDigest:");
//輸出演算法運算結果
System.out.println(new String(messageDigest.digest(),"UTF8"));
}
}
還可以通過消息認證碼來進行加密實現,javax.crypto.Mac提供了一個解決方案,有興趣者可以參考相關API文檔,本文只是簡單介紹什麼是摘要演算法。
2)私鑰加密:
消息摘要只能檢查消息的完整性,但是單向的,對明文消息並不能加密,要加密明文的消息的話,就要使用其他的演算法,要確保機密性,我們需要使用私鑰密碼術來交換私有消息。
這種最好理解,使用對稱演算法。比如:A用一個密鑰對一個文件加密,而B讀取這個文件的話,則需要和A一樣的密鑰,雙方共享一個私鑰(而在web環境下,私鑰在傳遞時容易被偵聽):
使用私鑰加密的話,首先需要一個密鑰,可用javax.crypto.KeyGenerator產生一個密鑰(java.security.Key),然後傳遞給一個加密工具(javax.crypto.Cipher),該工具再使用相應的演算法來進行加密,主要對稱演算法有:DES(實際密鑰只用到56位),AES(支持三種密鑰長度:128、192、256位),通常首先128位,其他的還有DESede等,jdk1.5種也提供了對對稱演算法的支持,以下例子使用AES演算法來加密:
/**
*PrivateExmaple.java
*Copyright 2005-2-16
*/
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import java.security.Key;
/**
*私鈅加密,保證消息機密性
*/
public class PrivateExample{
public static void main(String[] args) throws Exception{
if(args.length!=1){
System.err.println("Usage:java PrivateExample <text>");
System.exit(1);
}
byte[] plainText=args[0].getBytes("UTF8");
//通過KeyGenerator形成一個key
System.out.println("\nStart generate AES key");
KeyGenerator keyGen=KeyGenerator.getInstance("AES");
keyGen.init(128);
Key key=keyGen.generateKey();
System.out.println("Finish generating DES key");
//獲得一個私鈅加密類Cipher,ECB是加密方式,PKCS5Padding是填充方法
Cipher cipher=Cipher.getInstance("AES/ECB/PKCS5Padding");
System.out.println("\n"+cipher.getProvider().getInfo());
//使用私鈅加密
System.out.println("\nStart encryption:");
cipher.init(Cipher.ENCRYPT_MODE,key);
byte[] cipherText=cipher.doFinal(plainText);
System.out.println("Finish encryption:");
System.out.println(new String(cipherText,"UTF8"));
System.out.println("\nStart decryption:");
cipher.init(Cipher.DECRYPT_MODE,key);
byte[] newPlainText=cipher.doFinal(cipherText);
System.out.println("Finish decryption:");
System.out.println(new String(newPlainText,"UTF8"));
}
}
3)公鑰加密:
上面提到,私鑰加密需要一個共享的密鑰,那麼如何傳遞密鑰呢?web環境下,直接傳遞的話很容易被偵聽到,幸好有了公鑰加密的出現。公鑰加密也叫不對稱加密,不對稱演算法使用一對密鑰對,一個公鑰,一個私鑰,使用公鑰加密的數據,只有私鑰能解開(可用於加密);同時,使用私鑰加密的數據,只有公鑰能解開(簽名)。但是速度很慢(比私鑰加密慢100到1000倍),公鑰的主要演算法有RSA,還包括Blowfish,Diffie-Helman等,jdk1.5種提供了對RSA的支持,是一個改進的地方:
/**
*PublicExample.java
*Copyright 2005-2-16
*/
import java.security.Key;
import javax.crypto.Cipher;
import java.security.KeyPairGenerator;
import java.security.KeyPair;
/**
*一個簡單的公鈅加密例子,Cipher類使用KeyPairGenerator生成的公鈅和私鈅
*/
public class PublicExample{
public static void main(String[] args) throws Exception{
if(args.length!=1){
System.err.println("Usage:java PublicExample <text>");
System.exit(1);
}
byte[] plainText=args[0].getBytes("UTF8");
//構成一個RSA密鑰
System.out.println("\nStart generating RSA key");
KeyPairGenerator keyGen=KeyPairGenerator.getInstance("RSA");
keyGen.initialize(1024);
KeyPair key=keyGen.generateKeyPair();
System.out.println("Finish generating RSA key");
//獲得一個RSA的Cipher類,使用公鈅加密
Cipher cipher=Cipher.getInstance("RSA/ECB/PKCS1Padding");
System.out.println("\n"+cipher.getProvider().getInfo());
System.out.println("\nStart encryption");
cipher.init(Cipher.ENCRYPT_MODE,key.getPublic());
byte[] cipherText=cipher.doFinal(plainText);
System.out.println("Finish encryption:");
System.out.println(new String(cipherText,"UTF8"));
//使用私鈅解密
System.out.println("\nStart decryption");
cipher.init(Cipher.DECRYPT_MODE,key.getPrivate());
byte[] newPlainText=cipher.doFinal(cipherText);
System.out.println("Finish decryption:");
System.out.println(new String(newPlainText,"UTF8"));
}
}
4)數字簽名:
數字簽名,它是確定交換消息的通信方身份的第一個級別。上面A通過使用公鑰加密數據後發給B,B利用私鑰解密就得到了需要的數據,問題來了,由於都是使用公鑰加密,那麼如何檢驗是A發過來的消息呢?上面也提到了一點,私鑰是唯一的,那麼A就可以利用A自己的私鑰進行加密,然後B再利用A的公鑰來解密,就可以了;數字簽名的原理就基於此,而通常為了證明發送數據的真實性,通過利用消息摘要獲得簡短的消息內容,然後再利用私鑰進行加密散列數據和消息一起發送。java中為數字簽名提供了良好的支持,java.security.Signature類提供了消息簽名:
/**
*DigitalSignature2Example.java
*Copyright 2005-2-16
*/
import java.security.Signature;
import java.security.KeyPairGenerator;
import java.security.KeyPair;
import java.security.SignatureException;
/**
*數字簽名,使用RSA私鑰對對消息摘要簽名,然後使用公鈅驗證 測試
*/
public class DigitalSignature2Example{
public static void main(String[] args) throws Exception{
if(args.length!=1){
System.err.println("Usage:java DigitalSignature2Example <text>");
System.exit(1);
}
byte[] plainText=args[0].getBytes("UTF8");
//形成RSA公鑰對
System.out.println("\nStart generating RSA key");
KeyPairGenerator keyGen=KeyPairGenerator.getInstance("RSA");
keyGen.initialize(1024);
KeyPair key=keyGen.generateKeyPair();
System.out.println("Finish generating RSA key");
//使用私鈅簽名
Signature sig=Signature.getInstance("SHA1WithRSA");
sig.initSign(key.getPrivate());
sig.update(plainText);
byte[] signature=sig.sign();
System.out.println(sig.getProvider().getInfo());
System.out.println("\nSignature:");
System.out.println(new String(signature,"UTF8"));
//使用公鈅驗證
System.out.println("\nStart signature verification");
sig.initVerify(key.getPublic());
sig.update(plainText);
try{
if(sig.verify(signature)){
System.out.println("Signature verified");
}else System.out.println("Signature failed");
}catch(SignatureException e){
System.out.println("Signature failed");
}
}
}
5)數字證書。
還有個問題,就是公鑰問題,A用私鑰加密了,那麼B接受到消息後,用A提供的公鑰解密;那麼現在有個討厭的C,他把消息攔截了,然後用自己的私鑰加密,同時把自己的公鑰發給B,並告訴B,那是A的公鑰,結果....,這時候就需要一個中間機構出來說話了(相信權威,我是正確的),就出現了Certificate Authority(也即CA),有名的CA機構有Verisign等,目前數字認證的工業標準是:CCITT的X.509:
數字證書:它將一個身份標識連同公鑰一起進行封裝,並由稱為認證中心或 CA 的第三方進行數字簽名。
密鑰庫:java平台為你提供了密鑰庫,用作密鑰和證書的資源庫。從物理上講,密鑰庫是預設名稱為 .keystore 的文件(有一個選項使它成為加密文件)。密鑰和證書可以擁有名稱(稱為別名),每個別名都由唯一的密碼保護。密鑰庫本身也受密碼保護;您可以選擇讓每個別名密碼與主密鑰庫密碼匹配。
使用工具keytool,我們來做一件自我認證的事情吧(相信我的認證):
1、創建密鑰庫keytool -genkey -v -alias feiUserKey -keyalg RSA 默認在自己的home目錄下(windows系統是c:\documents and settings\<你的用戶名> 目錄下的.keystore文件),創建我們用 RSA 演算法生成別名為 feiUserKey 的自簽名的證書,如果使用了-keystore mm 就在當前目錄下創建一個密鑰庫mm文件來保存密鑰和證書。
2、查看證書:keytool -list 列舉了密鑰庫的所有的證書
也可以在dos下輸入keytool -help查看幫助。