版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、江蘇大學(xué)計算機科學(xué)與通信工程學(xué)院信息安全綜合課程設(shè)計-端口掃描器與AES加解密指導(dǎo)老師: 班級: 學(xué)號: 姓名: 日期:2013/12目錄1、課程設(shè)計目的12、課程設(shè)計要求13、 知識原理13.1端口掃描原理1全TCP連接13.2 AES實現(xiàn)原理24、 課程設(shè)計與實現(xiàn)34.1 在Java多線程下端口掃描器的實現(xiàn)34.2掃描器界面瀏覽與使用說明44.3 JAVA語言中AES算法的實現(xiàn)44.4Java中有關(guān)AES算法的相關(guān)概念44.5 Java中實現(xiàn)AES加密與解密的一些類和接口5Key接口5SecretKey接口5SecureRandom 類5KeyGenerator類5Cipher類65、 運
2、行與調(diào)試65.1 端口掃描器在Eclipse下的開發(fā)架構(gòu)65.2端口掃描器的調(diào)試65.3 AES在沒修改程序原本設(shè)置的密碼時85.4 AES隨機修改密碼后85.5 AES對明文進(jìn)行修改96、 性能分析與評價106.1端口掃描器功能評價106.2端口掃描器在實現(xiàn)上對于多線程在管理上的評價與分析106.3 端口掃描器總體評價106.4 AES分析116.5 AES存在的問題117、 心得體會128、 源代碼128.1端口掃描器128.2 AES加解密代碼19I信息安全綜合課程設(shè)計 -端口掃描器與AES加密器的JAVA實現(xiàn)1、課程設(shè)計目的本課程設(shè)計要求學(xué)生在已有理論學(xué)習(xí)的基礎(chǔ)上,動手編寫程序,通過應(yīng)
3、用所學(xué)習(xí)到的相關(guān)知識,解決一些實際安全應(yīng)用問題。從而,真正理解和掌握信息安全相關(guān)理論。2、課程設(shè)計要求綜合所學(xué)到的各門信息安全專業(yè)課知識,集成一個綜合的信息安全系統(tǒng)。在該系統(tǒng)中包含兩個信息安全功能,分別是端口掃描功能和AES加解密功能。3、 知識原理3.1端口掃描原理端口掃描器主要分為:經(jīng)典描器(全TCP連接)和SYN(半連接)掃描器 。全TCP連接全TCP連接是長期以來TCP端口掃描的基礎(chǔ)。掃描主機嘗試(使用三次握手)與目的機指定端口建立建立正規(guī)的連接。連接由系統(tǒng)調(diào)用connect()開始。對于每一個監(jiān)聽端口,connect()會獲得成功,否則返回1,表示端口不可訪問。這種掃描方法很容易檢測
4、出來,在日志文件中會有大量密集的連接和錯誤記錄)。端口掃描的原理其實非常簡單,只是簡單的利用JAVA提供庫函數(shù)Socket進(jìn)行調(diào)用,與每一個感興趣的目標(biāo)計算機的端口進(jìn)行連接。如果對方端口處于監(jiān)聽狀態(tài),那么連接就能成功。否則,這個端口不能用,既沒有提供服務(wù)。這個技術(shù)的一個最大的優(yōu)點是,不需要任何權(quán)限,系統(tǒng)中的任何用戶都有權(quán)利使用這個調(diào)用。 引入多線程機制,利用多線程掃描的好處就是速度快,如果對每個目標(biāo)端口以線性的方式使用單獨的連接調(diào)用,那么將會花費相當(dāng)長的時間。多線程同時打開多個套接字,從而加速掃描。在本設(shè)計中用戶可以自定義線程的個數(shù)。此處用戶還可以自定義掃描方式 3.2 AES實現(xiàn)原
5、理AES在密碼學(xué)中是高級加密標(biāo)準(zhǔn)(Advanced Encryption Standard)的縮寫,該算法是美國聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn),這個標(biāo)準(zhǔn)用來替代原先的DES并已經(jīng)被多方分析且廣為全世界所使用。AES算法又稱Rijndael加密法,該算法為比利時密碼學(xué)家Joan Daemen和Vincent Rijmen所設(shè)計,并且結(jié)合兩位作者的名字最終以Rijndael命名。AES是美國國家標(biāo)準(zhǔn)技術(shù)研究所NIST旨在取代DES的21世紀(jì)的加密標(biāo)準(zhǔn)。 AES算法將成為美國新的數(shù)據(jù)加密標(biāo)準(zhǔn)而被廣泛應(yīng)用在各個領(lǐng)域中。AES作為新一代的數(shù)據(jù)加密標(biāo)準(zhǔn)匯聚了強安全性、高性能、高效率、易用和靈活等優(yōu)點。AE
6、S加密數(shù)據(jù)塊分組長度必須為128比特,密鑰長度可以是128比特、192比特、256比特中的任意一個(如果數(shù)據(jù)塊及密鑰長度不足時,會補齊)。AES的基本要求是,采用對稱分組密碼體制,密鑰長度的最少支持為128位、192位、256位,分組長度128位,算法應(yīng)易于各種硬件和軟件實現(xiàn)。 AES加密有很多輪的重復(fù)和變換。大致步驟如下: 密鑰擴展 初始輪 重復(fù)輪,每一輪又包括:字節(jié)代換、行移位變換、列混合變換和輪密鑰加變換。 最終輪,最終輪沒有列混淆變換。 AES加密算法主要由四個輪操作構(gòu)成:字節(jié)代換、行移位變換、列混合變換和輪密鑰加變換。但由于AES并未使用Feistel結(jié)構(gòu),在每一輪操作時,是對整個分
7、組進(jìn)行處理,而不是只對一般分組進(jìn)行處理,所以AES的解密過程同加密過程并不一致。由于AES的四個輪操作(字節(jié)代換、行位移、列混合和輪密鑰加)都是可逆的,因而,解密操作的一輪就是順序執(zhí)行逆行移位、逆字節(jié)代換、輪密鑰加和逆列混合。同加密操作類似,最后一輪不執(zhí)行逆混合,在第一輪解密之前,要執(zhí)行一次輪密鑰加操作。AES的整體結(jié)構(gòu)如下圖:4、 課程設(shè)計與實現(xiàn)4.1 在Java多線程下端口掃描器的實現(xiàn)本程序使用了為主要的Scanner類和Scan類。Scan類的作用是創(chuàng)建線程掃描端口,然后把結(jié)果顯示到前臺。Scanner類的作用是構(gòu)造前臺布局,調(diào)用Scan類添加事件處理,對輸入進(jìn)行錯誤判斷,如果輸入不在允
8、許的范圍之內(nèi)則顯示相關(guān)錯誤。 在本程序中用到了網(wǎng)絡(luò)編程的兩個類,下面介紹這兩個類的常用方法。 InetSocketAddress類構(gòu)造方法如下: InetSocketAddress(InetAddress addr, int port):根據(jù) IP 地址和端口號創(chuàng)建套接字地址。 InetSocketAddress(int port):創(chuàng)建套接字地址,其中 IP 地址為通配符地址,端口號為指定值。 InetSocketAddress(String hostn
9、ame, int port):根據(jù)主機名和端口號創(chuàng)建套接字地址。 Socket類需用到的方法如下: Socket():通過系統(tǒng)默認(rèn)類型的 SocketImpl 創(chuàng)建未連接套接字 Socket(InetAddress address, int port):創(chuàng)建一個流套接字并將其連接到指定 IP 地址的指定端口號。 l void close():關(guān)閉此套接字。 void connect(SocketAddr
10、ess endpoint, int timeout):將此套接字連接到具有指定超時值的服務(wù)器。 算法邏輯:循環(huán)指定端口段的所有端口,對所有端口建立連接。連接成功后我們就算完成了當(dāng)前循環(huán)的任務(wù),然后調(diào)用close()方法關(guān)閉連接。因為在“Socket scans = new Socket()”和“scans.connect(sockaddr, timeoutMs);”執(zhí)行的時候,如果成功建立連接,就不會執(zhí)行到catch里面,而是執(zhí)行到下面的“Scanner.Result.append("主機:" + Scanner.hostName.g
11、etText()+ " 端口:" + i);”語句;如果不能連接上去就會拋出一個異常IOException被我們捕獲,程序就會運行到catch里面,執(zhí)行catch里面的語句;最后繼續(xù)下一個循環(huán)。 4.2掃描器界面瀏覽與使用說明1) 主機IP:填寫你所要掃描的主機IP地址2) 起始端口:填寫你要掃描的起始端口值(065535)3) 結(jié)束端口:填寫你要掃面到主機的哪個端口(065535)才結(jié)束4) 線程數(shù):表示你要開啟多少個線程完成端口掃描的任務(wù)5) 掃描結(jié)果:用于向用戶展示掃描的結(jié)果,記錄被掃描主機的當(dāng)前開放端口6) 掃描狀態(tài):用于向用戶張氏當(dāng)前的掃描狀態(tài)7) 掃描按鈕:開啟
12、掃描功能8) 退出按鈕:退出該掃描器,結(jié)束掃描。4.3 JAVA語言中AES算法的實現(xiàn) 本次課程設(shè)計的主要目的不在于程序如何編寫,重在對AES的算法加密解密流程進(jìn)行熟悉,所以在程序的講解這方面,我們不需要花費太大的功夫,主要集中在對AES算法的分析。在JAVA的世界里,密碼學(xué)是其安全模塊的重要組成部分,JAVA安全領(lǐng)域總共分為四個部分:JCA(Java Cryptography Architecture,Java加密體系結(jié)構(gòu))、JCE(Java Cryptography Extension,Java加密擴展包)、JAAS(Java Authentication and Authenticati
13、on Service,Java鑒別與安全服務(wù))。4.4Java中有關(guān)AES算法的相關(guān)概念² JCA提供基本的加密框架,如證書、數(shù)字簽名、消息摘要和密鑰對產(chǎn)生器。² JCE在JCA基礎(chǔ)上作了擴展提供加密算法、消息摘要算法和密鑰管理等功能。² JSSE提供了基于SSL(Secure Sockets Layer,安全套接字層)的加密功能。² JAAS提供了在Java平臺上進(jìn)行用戶身份鑒別的功能。4.5 Java中實現(xiàn)AES加密與解密的一些類和接口Java中已經(jīng)提供一些常用的加密算法,這些加密算法被封裝為JDK中的一些相關(guān)類和接口,以下是實現(xiàn)AES加密與解密的一
14、些類和接口:Key接口該接口位于包 java.security中,它是所有密鑰接口的頂層接口,一切與加密解密有關(guān)的操作都離不開Key接口。該接口提供了如下三個方法:public String getAlgorithm ( ),該方法返回此密鑰的標(biāo)準(zhǔn)算法稱。public byte getEncoded ( ),該方法返回基本編碼格式的密鑰,通常是二進(jìn)制格式,如果此密鑰不支持編碼,則返回null。public String getFormat ( ),該方法返回此密鑰的基本編碼格式,如果此密鑰不支持,則返回null。SecretKey接口 SecretKey接口位于包java.crypto中,它是
15、對稱密鑰頂層接口。DES、AES等多種對稱密碼算法密鑰均可通過該接口提供。該接口聲明如下:public interface SecretKey extends KeySecureRandom 類SecureRandom類繼承于Random類(java.util.Random),它起到強加密隨機數(shù)生成器的作用。該類的構(gòu)造方法如下:public SecureRandom( ),構(gòu)造一個實現(xiàn)默認(rèn)隨機數(shù)算法的SecureRandom對象public SecureRandom(byte seed),在給定種子的前提下,構(gòu)造一個實現(xiàn)默認(rèn)隨機數(shù)算法的SecureRandom對象。KeyGenerator類K
16、eyGenerator類是用來生成秘密密鑰的,我們稱它為秘密密鑰生成器。該類通過以下方法獲得實例化對象:public static final KeyGenerator getInstance( String algorithm ),返回生成指定算法的秘密密鑰的KeyGenerator對象。Cipher類Cipher類為加密和解密提供密碼功能,它構(gòu)成了JCE框架的核心。該類是一個引擎類,它需要通過getInstance()工廠方法來實例化對象。相關(guān)方法如下:public static Cipher getInstance(String transformation),該方法返回實現(xiàn)指定轉(zhuǎn)換的C
17、ipher對象。其中,參數(shù)String transformation的格式是“算法/工作模式/填充模式”,不同的算法支持不同的工作模式以及填充模式。 SecretKey接口和SecretKeySpecSecretKey接口繼承于Key接口,而SecretKeySpec類是KeySpec接口的實現(xiàn)類,用于構(gòu)建秘密密鑰規(guī)范。可根據(jù)一個字節(jié)數(shù)組構(gòu)造一個SecretKey,而無須通過一個SecretKeyFactory。該類的聲明為:public class SecretKeySpec extends Object implements KeySpec , SecretKey該類的構(gòu)造方法為:publ
18、ic SecretKeySpec (byte key , String algorithm),根據(jù)給定的字節(jié)數(shù)組構(gòu)造一個密鑰。IvParameterSpec類該類位于包javax.crypto.spec中,此類指定一個初始化向量IV,它的構(gòu)造方法如下:public IvParameterSpec (byte iv),用iv中的字節(jié)構(gòu)造一個IvParameterSpec對象。5、 運行與調(diào)試5.1 端口掃描器在Eclipse下的開發(fā)架構(gòu)只有一個包和一個類。5.2端口掃描器的調(diào)試正常掃描下的結(jié)果:當(dāng)輸入的配置信息不對是的錯誤提示(用于交互的友好性):5.3 AES在沒修改程序原本設(shè)置的密碼時當(dāng)輸入
19、的密碼是private static final String secret = “please enter a secret”; 即:”please enter a secret” ,明文為”3100604032-3100604019”,輸出的結(jié)果是:5.4 AES隨機修改密碼后 我們直接在主函數(shù)中修改密碼secret的值,看是否影響加解密,在這里我們不對明文進(jìn)行修改,看輸出的結(jié)果如下:5.5 AES對明文進(jìn)行修改 我們嘗試對明文進(jìn)行修改,看是否仍然能完成加解密:6、 性能分析與評價6.1端口掃描器功能評價該端口掃描器是全TCP掃描,在Java強大的類功能下,實現(xiàn)起來非常簡單,沒有多復(fù)雜的算
20、法與代碼。從上述的調(diào)試結(jié)果可以看出,該掃描器基本實現(xiàn)了端口掃描的功能,但并不完善,因為它沒有完全將對應(yīng)IP主機的開放端口掃描出來。這是當(dāng)前掃描主機的開放端口截圖:大家可以從中看出并非所有的開放端口都被掃描出來了。6.2端口掃描器在實現(xiàn)上對于多線程在管理上的評價與分析從上述調(diào)試結(jié)果的截圖可以看出來,掃描結(jié)果的表示上有問題。明明掃描顯示“掃描完成”但是掃描器還在掃描,掃描狀態(tài)上也如此顯示未完成掃描,我們不能清楚的判斷該次掃描是否完成了。從這可以看出,我們對所開啟的子線程沒有實現(xiàn)很好的管理。主線程在等待3秒后,由于掃描的端口較多,部分子線程還沒有完成掃描,而主線程的等待時間已經(jīng)到了,于是繼續(xù)執(zhí)行Th
21、read.sleep()下面的代碼,提示“掃描完成”,但事實并非如此。6.3 端口掃描器總體評價該端口掃描器在掃描較少端口時,還是能夠較好的體現(xiàn)準(zhǔn)確掃描的。但是當(dāng)要掃描的端口十分多的時候,由于沒有做好多線程的管理,掃描的結(jié)果不是十分完美,用戶的交互也做的不是很好。所以該全TCP端口掃描器不是一個好的端口掃描器。6.4 AES分析在上述調(diào)試過程中,我們采取了“控制變量”的分析方法。在4.1和4.1中,我們對密碼進(jìn)行了修改(這里我們不關(guān)心在10輪迭代中每次密鑰擴展的輸出,意義不大),在這個工程中,我們通過對比輸出結(jié)果,發(fā)現(xiàn)加密和解密都成功了。在AES/OFB/NoPading模式下,不滿16字節(jié)的
22、密文輸出都是按原來長度輸出的,對比上述4.1和4.2的密文輸出(十六進(jìn)制),它們的長度剛好也是原來明文的長度。接下來,我們考慮當(dāng)密碼一樣時,對不同的明文加密會有怎樣的效果呢?結(jié)果參見4.2和4.3的輸出,我們發(fā)現(xiàn),加解密也成功輸出了??梢姡绦虮容^成功的實現(xiàn)了AES的加密解密工作。好,那么這次我們按照課設(shè)的要求,以學(xué)號為明文,日期作為密碼,再次演示一下上述AES的加密解密過程,輸出如下:6.5 AES存在的問題盡管本次課設(shè)基本上完成了AES的加解密要求,但也有不完善之處,比如:該程序沒有友好的交互界面,在測試過程中也要反復(fù)修改程序代碼,在程序的整體設(shè)計上沒有考慮到全局性。還有就是,在算法的邏輯
23、上可能也存在錯誤,比如對AES的各種加密模式如OFB、ECB、CFB等的細(xì)節(jié)還不是很了解,在程序的設(shè)計上可能存在漏洞。希望以后能不斷改進(jìn)。7、 心得體會實踐是檢驗真理的標(biāo)準(zhǔn),雖然在理論知道算法的原理,但要能夠把它用編程語言描述出來,才能算真正掌握了它,才知道這不是一件容易的事,所以我們不能眼高手低,不能覺得懂了就不動手去做,只有在實踐運用中才能掌握好知識。在本次課設(shè)中,我先對AES算法的流程進(jìn)行了一定的了解,在這個基礎(chǔ)上,考慮較好的程序語言來實現(xiàn)它。發(fā)現(xiàn),在Java環(huán)境下,JDK對該算法進(jìn)行了很好的封裝,實現(xiàn)起AES來非常清晰明了,而且還可以簡化代碼量,在這一點上,我們既減輕了編寫大量代碼的壓
24、力,又能較好的掌握實現(xiàn)ASE算法,達(dá)到了學(xué)習(xí)的目的!在做端口掃描這一模塊時,由于自己對Socket編程不是很熟悉,于是花了一定的時間進(jìn)行學(xué)習(xí),大概了解原理及用法后才開始編寫代碼。還體會到,算法在遇到問題時,應(yīng)該先獨自思考,在解決不了問題時,應(yīng)善于向同學(xué)請教,同時,還應(yīng)善于利用網(wǎng)絡(luò)資源,這樣才是好的學(xué)習(xí)方法。在編寫源代碼時,應(yīng)養(yǎng)成好的編程風(fēng)格,這樣便于自己和他人查看,也有利于自己檢查算法,使得整個程序看起來簡潔明了,閱讀方便。總而言之,通過這次課設(shè),我對AES算法有了一定的了解,這是我最大的收獲。8、 源代碼8.1端口掃描器package ivonzhang.PortScanner.test;/
25、* * 基于多線程端口掃描程序源代碼 * */import java.awt.Color;import java.awt.Container;import java.awt.Label;import java.awt.TextArea;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.IOException;import .InetAd
26、dress;import .InetSocketAddress;import .Socket;import .SocketAddress;import .UnknownHostException;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JTextField;public class Scanner implements ActionListener / 創(chuàng)建主窗口public static JFrame mainFrame = new J
27、Frame();public static Label labelIP = new Label("主機IP");public static Label labelPortStart = new Label("起始端口:");public static Label labelPortEnd = new Label("結(jié)束端口:");public static Label labelThread = new Label("線程數(shù):");public static Label labelResult = new Labe
28、l("掃描結(jié)果:");public static Label State = new Label("掃描狀態(tài):");public static Label Scanning = new Label("未開始掃描");/掃描需要的配置信息public static JTextField hostName = new JTextField("localhost");/掃描的IPpublic static JTextField PortStart = new JTextField("0");/起始端口
29、public static JTextField PortEnd = new JTextField("100");/結(jié)束端口public static JTextField ThreadNum = new JTextField("20");/線程數(shù)目/ 文本區(qū)域,顯示掃描結(jié)果public static TextArea Result = new TextArea();public static Label DLGINFO = new Label("");public static JButton Start = new JButton
30、("掃描");public static JButton Exit = new JButton("退出");public static JButton Clear = new JButton("清除");/ 錯誤提示對話框public static JDialog DLGError = new JDialog(mainFrame, "錯誤");public static JButton OK = new JButton("確定");public Scanner() / 設(shè)置主窗體名稱mainFr
31、ame.setTitle("多線程端口掃描器");/ 設(shè)置主窗體位置和大小mainFrame.setBounds(180, 200, 550, 300);mainFrame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0););/ 設(shè)置錯誤提示框Container dPanel = DLGError.getContentPane();dPanel.setLayout(null);dPanel.add(DLGINFO);dPanel.add
32、(OK);OK.setActionCommand("ok");OK.addActionListener(this);/ 在主窗體中添加其他組件mainFrame.setLayout(null);mainFrame.setResizable(false);mainFrame.add(Start);mainFrame.add(Exit);mainFrame.add(Clear);mainFrame.add(labelIP);mainFrame.add(hostName);mainFrame.add(labelPortStart);mainFrame.add(labelPortE
33、nd);mainFrame.add(PortStart);mainFrame.add(PortEnd);mainFrame.add(labelThread);mainFrame.add(ThreadNum);mainFrame.add(labelResult);mainFrame.add(Result);mainFrame.add(State);mainFrame.add(Scanning);/ 設(shè)置掃描按鈕和退出按鈕Clear.setBounds(405, 232, 60, 30);Clear.setActionCommand("Clear");Clear.addActi
34、onListener(this);Start.setBounds(405, 232, 60, 30);Start.setActionCommand("Start");Start.addActionListener(this);Exit.setBounds(475, 232, 60, 30);Exit.setActionCommand("Exit");Exit.addActionListener(this);labelIP.setBounds(17, 13, 50, 20);hostName.setBounds(67, 10, 92, 25);hostNa
35、me.setHorizontalAlignment(JTextField.CENTER);labelPortStart.setBounds(162, 13, 60, 20);PortStart.setBounds(227, 10, 45, 25);PortStart.setHorizontalAlignment(JTextField.CENTER);labelPortEnd.setBounds(292, 13, 60, 20);PortEnd.setBounds(357, 10, 45, 25);PortEnd.setHorizontalAlignment(JTextField.CENTER)
36、;labelThread.setBounds(422, 13, 50, 20);ThreadNum.setBounds(477, 10, 45, 25);ThreadNum.setHorizontalAlignment(JTextField.CENTER);labelResult.setBounds(1, 45, 55, 20);Result.setBounds(1, 65, 542, 160);Result.setEditable(false);Result.setBackground(Color.WHITE);/ 設(shè)置窗口顏色State.setBounds(17, 232, 60, 30)
37、;Scanning.setBounds(80, 232, 120, 30);mainFrame.setVisible(true);public void actionPerformed(ActionEvent e) String cmd = e.getActionCommand();/ 得到處理事件if (cmd.equals("Start") try Scan.hostAddress = InetAddress.getByName(Scanner.hostName.getText(); catch (UnknownHostException e1) DLGError.se
38、tBounds(300, 280, 160, 110);DLGINFO.setText("錯誤的IP地址/域名");DLGINFO.setBounds(25, 15, 100, 20);OK.setBounds(45, 40, 60, 30);DLGError.setVisible(true);return;int minPort;int maxPort;int threadNum;/ 獲取輸入數(shù)據(jù)try minPort = Integer.parseInt(PortStart.getText();maxPort = Integer.parseInt(PortEnd.get
39、Text();threadNum = Integer.parseInt(ThreadNum.getText(); catch (NumberFormatException e1) DLGError.setBounds(300, 280, 299, 120);DLGINFO.setText("錯誤的端口號或線程數(shù)!端口號和線程數(shù)必須為整數(shù)!");DLGINFO.setBounds(10, 20, 280, 20);OK.setBounds(110, 50, 60, 30);DLGError.setVisible(true);return;/ 輸入信息錯誤處理if (minPo
40、rt < 0) | (maxPort > 65535) | (minPort > maxPort) DLGError.setBounds(300, 280, 295, 120);DLGINFO.setText("最小端口必須是0-65535并且小于最大端口的整數(shù)");DLGINFO.setBounds(10, 20, 280, 20);OK.setBounds(120, 50, 60, 30);DLGError.setVisible(true);return;if (threadNum > 200) | (threadNum < 0) DLGE
41、rror.setBounds(300, 280, 184, 120);DLGINFO.setText("進(jìn)程數(shù)必須是1-200中的整數(shù)");DLGINFO.setBounds(10, 20, 200, 20);OK.setBounds(55, 50, 60, 30);DLGError.setVisible(true);return;Result.append("正在掃描 " + hostName.getText() + " 線程數(shù):" + threadNum+ "n");Scanning.setText("
42、;開始掃描 .");Result.append("起始端口 " + minPort + " 結(jié)束端口 " + maxPort + " n");/開啟線程進(jìn)行端口掃描for (int i = minPort; i <= maxPort;) if (i + threadNum) <= maxPort) new Scan(i, i + threadNum).start();i += threadNum; else new Scan(i, maxPort).start();i += threadNum;try Threa
43、d.sleep(3000);/ 設(shè)置處理等待時間 catch (InterruptedException e1) e1.printStackTrace();/想一個方法讓主線程在其他所有子線程執(zhí)行完畢后再執(zhí)行下面兩句代碼Result.append("掃描完成!n");Scanning.setText("掃描完成!"); else if (cmd.equals("ok") DLGError.dispose();else if (cmd.equals("Exit") System.exit(1);else if (cm
44、d.equals("Clear") Result.setText("");public static void main(String args) new Scanner();/掃描端口的線程類class Scan extends Thread int maxPort, minPort;public static InetAddress hostAddress;Scan(int minPort, int maxPort) this.minPort = minPort;this.maxPort = maxPort;public void run() / 掃
45、描指定端口for (int i = minPort; i < maxPort; i+) Scanner.Scanning.setText("正在掃描" + i + "端口");try / 根據(jù)主機名和端口號創(chuàng)建套接字地址SocketAddress sockaddr = new InetSocketAddress(hostAddress, i);Socket scans = new Socket();int timeoutMs = 50;/ 將此套接字連接到具有指定超時值的服務(wù)器scans.connect(sockaddr, timeoutMs);/
46、Socket scans = new Socket(hostAddress,i);/ 關(guān)閉此套接字scans.close();/ 添加結(jié)果顯示Scanner.Result.append("主機:" + Scanner.hostName.getText()+ " 端口:" + i);switch (i) case 20:Scanner.Result.append("(FTP Data)");break;case 21:Scanner.Result.append("(FTP Control)");break;case
47、23:Scanner.Result.append("(TELNET)");break;case 25:Scanner.Result.append("(SMTP)");break;case 38:Scanner.Result.append("(RAP)");break;case 53:Scanner.Result.append("(DNS)");break;case 79:Scanner.Result.append("FINGER");break;case 80:Scanner.Result.ap
48、pend("(HTTP)");break;case 110:Scanner.Result.append("(POP)");break;case 161:Scanner.Result.append("(SNMP)");break;case 443:Scanner.Result.append("(HTTPS)");break;case 1433:Scanner.Result.append("(SQL)");break;case 8000:Scanner.Result.append("(OI
49、CQ)");break;Scanner.Result.append(" 開放n"); catch (IOException e) 8.2 AES加解密代碼package cn.ivonzhang;import java.security.SecureRandom;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.spec.IvParameterSpec;import javax.crypto.sp
50、ec.SecretKeySpec;public class AesTest /設(shè)置初始向量private static final IvParameterSpec iv = new IvParameterSpec("1234567890987612".getBytes(); private static final String secret = “please enter a secret”;/加密函數(shù),參數(shù)依次為密碼,明文public static String encrypt(String seed, String cleartext)throws Exception
51、 byte rawKey = getRawKey(seed.getBytes();byte result = encrypt(rawKey, cleartext.getBytes();return toHex(result);/解密函數(shù),參數(shù)依次為密碼,明文public static String decrypt(String seed, String encrypted)throws Exception byte rawKey = getRawKey(seed.getBytes();byte enc = toByte(encrypted);byte result = decrypt(rawK
52、ey, enc);return new String(result);/生成一個密鑰字節(jié)流private static byte getRawKey(byte seed) throws Exception KeyGenerator kgen = KeyGenerator.getInstance("AES");SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");/此類提供強加密隨機數(shù)生成器sr.setSeed(seed);kgen.init(128, sr); / 192 and 256 bits
53、may not be availableSecretKey skey = kgen.generateKey();byte raw = skey.getEncoded();return raw;private static byte encrypt(byte raw, byte clear) throws Exception SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");/根據(jù)給定的密鑰字節(jié)數(shù)組構(gòu)造一個密鑰/Cipher cipher = Cipher.getInstance("AES/OFB/PKCS5Padding");/轉(zhuǎn)換方式"算法/模式/填充"Cipher cipher = Cipher.getInstance("AES/CFB16/NoPadding");cipher.init(Cipher
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024美容院美容院美容美發(fā)服務(wù)及產(chǎn)品銷售合作協(xié)議3篇
- 愛嬰醫(yī)院知識培訓(xùn)課件
- 2024設(shè)備試用標(biāo)準(zhǔn)協(xié)議范本
- 2025賓館股份內(nèi)部轉(zhuǎn)讓及品牌使用權(quán)許可協(xié)議3篇
- 2024設(shè)備買賣購銷合同-智能硬件版3篇
- 2024知識產(chǎn)權(quán)許可合同的補充協(xié)議
- 2025年度共享經(jīng)濟企業(yè)勞動合同范本3篇
- 2024版管溝施工勞務(wù)合同
- 2024虛擬現(xiàn)實技術(shù)開發(fā)公司與游戲開發(fā)商之間技術(shù)合作合同
- 2024石材材料采購協(xié)議書石材采購清單
- 黔東南南苗族侗族自治州黃平縣2024年數(shù)學(xué)三年級第一學(xué)期期末考試試題含解析
- 重癥醫(yī)學(xué)質(zhì)量控制中心督查評價標(biāo)準(zhǔn)及評分細(xì)則(2020版)
- 中建醫(yī)療工程交付指南
- 2024年甘肅省職業(yè)院校技能大賽養(yǎng)老照護(hù)(中職學(xué)生組)賽項樣題1
- 圓圈正義讀書分享課件
- 安平縣2024年小升初必考題數(shù)學(xué)檢測卷含解析
- 人教版數(shù)學(xué)二年級下冊全冊核心素養(yǎng)目標(biāo)教學(xué)設(shè)計
- 人教版PEP小學(xué)英語三年級下冊單詞表(帶音標(biāo))
- 康美藥業(yè)財務(wù)分析案例
- 《無人機駕駛航空試驗基地(試驗區(qū))基礎(chǔ)設(shè)施使用、管理規(guī)范(征求意見稿)》
- 寵物醫(yī)療行業(yè)人力資源管理戰(zhàn)略研究
評論
0/150
提交評論