信息安全課程設計-金融服務系統(tǒng).doc_第1頁
信息安全課程設計-金融服務系統(tǒng).doc_第2頁
信息安全課程設計-金融服務系統(tǒng).doc_第3頁
信息安全課程設計-金融服務系統(tǒng).doc_第4頁
信息安全課程設計-金融服務系統(tǒng).doc_第5頁
免費預覽已結(jié)束,剩余35頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

信息安全課程設計報告信息安全技術(shù)應用實踐課程設計報告設計題目 金融信息服務系統(tǒng)專業(yè)名稱: 班 級: 學 號: 姓 名: 同組成員: 指導教師: 2012年7月課 程 設 計 成 績本組課題:金融信息服務系統(tǒng)本人任務:制作完整的金融信息系統(tǒng)。主要制作登錄、注冊、信息發(fā)布窗體、服務器窗體以及各窗體之間的鏈接與監(jiān)聽,使之能進行完整的信息交互過程。序號評分內(nèi)容滿分實際得分1學習態(tài)度認真,考勤全到102方案設計合理,滿足安全需求,具有可操作性253系統(tǒng)功能完善、與方案一致、運行無誤304報告撰寫思路清晰、論證充分,行文流暢,書寫規(guī)范205答辯時思路清晰,重點突出,準確無誤106設計有獨到見解5總分100等級五級制評語: 指導教師簽名: 年 月 日目 錄目 錄3第一章 課程設計背景4第二章 設計的方案4一注冊和登錄時MD5加密算法:5二溝通過程中,用AES進行分組加密6三(MAC)進行完整性檢查以及抵抗竊聽者的重放攻擊7第三章 方案分析8一MD5安全性:8二AES安全性:9三MAC安全性:9第四章 設計成果9一以下是該系統(tǒng)的主要功能流程圖:10二以下是該系統(tǒng)主要界面:111、首先運行服務器,后啟動服務器。11122.客戶登錄133.客戶注冊134金融消息發(fā)布14第五章 總結(jié)16參考文獻16附錄(代碼)16第一章 課程設計背景金融業(yè)是指經(jīng)營金融商品的特殊企業(yè),它包括銀行業(yè)、保險業(yè)、信托業(yè)、證券業(yè)、租賃業(yè)和典當業(yè)。 在現(xiàn)代社會中,金融業(yè)用途廣泛:第一,社會各階層各行業(yè)所有人,都需要資金融通,不論長期的或短期的資金需求,不論國內(nèi)的或海外的現(xiàn)金需求,不論短期的或遠期的資金需求,金融業(yè)都可以滿足這些需要。第二,已盈利的企業(yè)或個人,他的金錢需要有個存放或運用的去處,金融業(yè)正可以滿足這個需要。所以金融服務系統(tǒng)是一個具有優(yōu)化資金配置的作用的系統(tǒng),而當下也是一個信息爭奪的時代,因此金融信息獲取的及時性就相關人員來說就顯得尤其重要,影響到公司或個人的投資或融資決策。于是,金融業(yè)經(jīng)營手段的現(xiàn)代化是急需解決的問題,運用電子計算機和自動化服務能保證信息的共享性和及時性,這也是我們開發(fā)本系統(tǒng)的目的。我們的目的是:創(chuàng)造一個為客戶提供金融信息的平臺,金融服務人員可以在該平臺發(fā)布信息,而所有的注冊登錄客戶都可以及時跟進最新的金融信息,以做出相應的決策。第二章 設計的方案本系統(tǒng)是運用純java語言制作的金融服務系統(tǒng)化,客戶端服務器客戶端的消息交互模式??蛻舳斯δ苤饕蛻糇?、登錄、信息發(fā)送、在線用戶顯示。提供給客戶一個友好的界面,方便客戶的操作,從服務器上得到數(shù)據(jù)后再顯示給客戶,并根據(jù)不同的需求,向服務器發(fā)送各種請求。服務端的功能主要包括接受客戶注冊(采用口令、MD5方式管理保護注冊信息)、接受客戶登錄請求、提示客戶離線以及顯示端口號、服務器當前狀態(tài)等。服務器運行后,開啟服務就可以開始監(jiān)聽客戶請求,如有信息發(fā)送過來,首先發(fā)送確認信息,然后建立一個線程,處理接受到得數(shù)據(jù),處理結(jié)束后,線程就結(jié)束,這樣可以實時接受每一個客戶的請求,不會因為處理一個客戶的請求而忽略了其他客戶的請求。 我們開發(fā)的系統(tǒng)應滿足以下技術(shù)要求:1、 登錄、注冊、服務器、客戶端等窗體的設計與連接。2、 實現(xiàn)客戶賬號和密碼的對應安全存儲;3、 對所有的交流信息進行分組加密;4、 對所有的交流信息進行完整性檢驗;5、 實現(xiàn)服務器端對客戶身份的驗證;6、 能夠抵擋的攻擊人的防重放攻擊。一注冊和登錄時MD5加密算法:1、簡介:MD5的全稱是Message-Digest Algorithm 5(信息-摘要算法)。它的作用是讓大容量信息在用數(shù)字簽名軟件簽署私人密匙前被壓縮成一種保密的格式(就是把一個任意長度的字節(jié)串變換成一定長的大整數(shù))。2、應用:MD5的典型應用是對一段信息(Message)產(chǎn)生信息摘要(Message-Digest),以防止被篡改。 MD5廣泛用于加密和解密技術(shù)上。本文描述的系統(tǒng)中用戶的密碼就是以MD5經(jīng)加密后存儲在服務器。當用戶登錄的時候,系統(tǒng)把用戶輸入的密碼計算成MD5值,然后再去和保存在服務器中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統(tǒng)在并不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統(tǒng)的合法性。這不但可以避免用戶的密碼被具有系統(tǒng)管理員權(quán)限的用戶知道,而且還在一定程度上增加了密碼被破解的難度。3、算法描述:對MD5算法簡要的敘述可以為:MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經(jīng)過了一系列的處理后,算法的輸出由四個32位分組組成,將這四個32位分組級聯(lián)后將生成一個128位散列值。4、具體在本系統(tǒng)中的應用: 1 建立 MD5Encrypt1類,主要代碼為:byte btInput = s.getBytes();MessageDigest mdInst = MessageDigest.getInstance(MD5);mdInst.update(btInput);/處理數(shù)據(jù)byte md = mdInst.digest();/完成哈希計算2 注冊時,調(diào)用MD5Encrypt1類創(chuàng)建對象:MD5Encrypt1 md5=new MD5Encrypt1();data.password=md5.MD5(data.password); 由此將注冊客戶的密碼用MD5加密,然后才發(fā)送到服務器。 3 第三,登錄時,和注冊時加密方法一樣。二溝通過程中,用AES進行分組加密溝通過程中,我們對各種溝通信息采用對稱密碼分組加密方法,首先新建一個提供AES加密、解密算法的類,消息從發(fā)送端發(fā)送時調(diào)用AES加密算法,接受端接受到信息再調(diào)用AES解密算法進行解密。1、簡介:AES(The Advanced Encryption Standard)是美國國家標準與技術(shù)研究所用于加密電子數(shù)據(jù)的規(guī)范。它被預期能成為人們公認的加密包括金融、電信和政府數(shù)字信息的方法。2、應用:在應用方面,盡管DES在安全上是脆弱的,但由于快速DES芯片的大量生產(chǎn),使得DES仍能暫時繼續(xù)使用,為提高安全強度,通常使用獨立密鑰的三級DES。但是DES遲早要被AES代替。3、算法描述:AES 是一個迭代的、對稱密鑰分組的密碼,它可以使用128、192 和 256 位密鑰,并且用 128 位(16字節(jié))分組加密和解密數(shù)據(jù)。與公共密鑰密碼使用密鑰對不同,對稱密鑰密碼使用相同的密鑰加密和解密數(shù)據(jù)。通過分組密碼返回的加密數(shù)據(jù)的位數(shù)與輸入數(shù)據(jù)相同。迭代加密使用一個循環(huán)結(jié)構(gòu),在該循環(huán)中重復置換(permutations )和替換(substitutions)輸入數(shù)據(jù)。4、 具體在本系統(tǒng)中的應用:1 加密時: byte raw = sKey.getBytes();SecretKeySpec skeySpec = new SecretKeySpec(raw, AES);/根據(jù)給定的字節(jié)數(shù)組構(gòu)造一個密鑰Cipher cipher = Cipher.getInstance(AES/CBC/PKCS5Padding);/算法/模式/補碼方式/生成一個實現(xiàn)指定轉(zhuǎn)換的Cipher對象IvParameterSpec iv = new IvParameterSpec(0102030405060708.getBytes();/初值/使用CBC模式,需要一個向量iv,可增加加密算法的強度cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);/加密byte encrypted = cipher.doFinal(sSrc.getBytes();2 解密時:byte raw = sKey.getBytes(ASCII);SecretKeySpec skeySpec = new SecretKeySpec(raw, AES);Cipher cipher = Cipher.getInstance(AES/CBC/PKCS5Padding);IvParameterSpec iv = new IvParameterSpec(0102030405060708.getBytes();cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);/解密byte encrypted1 = hex2byte(sSrc);3 String aesKey =randkey.randomString(16); /調(diào)用方法隨機產(chǎn)生AES密鑰三(MAC)進行完整性檢查以及抵抗竊聽者的重放攻擊1、 簡介:MAC算法 (Message Authentication Codes),即消息認證碼(帶密鑰的Hash函數(shù)):消息的散列值由只有通信雙方知道的秘密密鑰K來控制。此時Hash值稱作MAC。2、 應用: 消息認證碼是基于密鑰和消息摘要所獲得的一個值,可用于數(shù)據(jù)源發(fā)認證和完整性校驗。是通信實體雙方使用的一種驗證機制,保證消息數(shù)據(jù)完整性的一種工具。3、 算法描述:在發(fā)送數(shù)據(jù)之前,發(fā)送方首先使用通信雙方協(xié)商好的散列函數(shù)計算其摘要值。在雙方共享的會話密鑰作用下,由摘要值獲得消息驗證碼。之后,它和數(shù)據(jù)一起被發(fā)送。接收方收到報文后,首先利用會話密鑰還原摘要值,同時利用散列函數(shù)在本地計算所收到數(shù)據(jù)的摘要值,并將這兩個數(shù)據(jù)進行比對。若兩者相等,則報文通過認證。 算法流程如下:4、具體在本系統(tǒng)中的應用:1 String mackey=mac.getMacKey();/調(diào)用方法隨機產(chǎn)生MAC密鑰String macmiwen=mac.toHex(mac.encryptHMAC(data,mackey);/MAC加密2 取得HMAC密鑰:KeyGenerator keyGenerator = KeyGenerator.getInstance(HmacMD5); SecretKey secretKey = keyGenerator.generateKey();3 執(zhí)行加密:byte bkey = new BASE64Decoder().decodeBuffer(key);SecretKey secretKey = new SecretKeySpec(bkey, HmacMD5);Mac mac = Mac.getInstance(secretKey.getAlgorithm();mac.init(secretKey);另外:String R=randkey.randomString(10); /生成10位隨機數(shù)R,用于防重放認證。 String openKey=145gh89sc83fgjpw; /用于總體傳送時外套的公共密鑰第三章 方案分析一MD5安全性:Van Oorschot和Wiener曾經(jīng)考慮過一個在散列中暴力搜尋沖突的函數(shù)(Brute-Force Hash Function),而且他們猜測一個被設計專門用來搜索MD5沖突的機器(這臺機器在1994年的制造成本大約是一百萬美元)可以平均每24天就找到一個沖突。但單從1991年到2001年這10年間,竟沒有出現(xiàn)替代MD5算法的MD6或被叫做其他什么名字的新算法這一點,我們就可以看出這個瑕疵并沒有太多的影響MD5的安全性。上面所有這些都不足以成為MD5的在實際應用中的問題。并且,由于MD5算法的使用不需要支付任何版權(quán)費用的,所以在一般的情況下(非絕密應用領域。但即便是應用在絕密領域內(nèi),MD5也不失為一種非常優(yōu)秀的中間技術(shù)),MD5怎么都應該算得上是非常安全的了。這也是我們選用MD5算法的根本原因。二AES安全性:AES算法的密鑰長度最小是128比特,即使每秒鐘能夠完成256個密鑰的搜索,至少需要的時間大約是149萬億年。因此, Rijndael算法對強力攻擊是免疫的。這就是我們選擇AES的最主要的原因,而且每次發(fā)送消息的密鑰都是隨機產(chǎn)生的,起到了更好的保護作用。三MAC安全性:MAC類似于加密,區(qū)別是MAC函數(shù)是單向的,因為它不需要解密,這個性質(zhì)使得鑒別函數(shù)比加密函數(shù)更不容易被破譯,安全強度提高了,起到很好的認證效果。且用產(chǎn)生的隨機數(shù)R檢驗,保證信息傳輸?shù)目煽啃?。第四?設計成果 我們開發(fā)的系統(tǒng)應滿足以下功能需求:1、 金融服務人員可以在一個安全的平臺發(fā)布金融信息以及投資建議;2、 這些信息只有該金融服務集團的客戶可以讀??;3、 這些信息可以被所有的該金融服務集團的客戶獲??;4、 客戶可以再該系統(tǒng)與服務人員或者是客戶之間可以進行簡單的溝通和交流;5、 金融服務人員可以識別登錄人的身份;金融服務人員可以查看各登錄人的登錄和退出時間。一以下是該系統(tǒng)的主要功能流程圖:圖一 客戶注冊功能流程圖備注:客戶注冊時,需要填寫注冊信息,包含“客戶名”、“密碼”和“邀請碼”。其中邀請碼由金融機構(gòu)工作人員填寫,若邀請碼不等于系統(tǒng)內(nèi)置的邀請碼,則注冊不能成功。這樣做,保證了,不能隨便任何人都可以注冊成功,只有經(jīng)過了工作人員核查信息之后,方能幫助其完成注冊信息。圖二 客戶登錄功能流程圖備注:客戶登錄時,需要輸入“客戶名”和“密碼”,若信息與注冊時保存在服務器端的信息相匹配,則,客戶可進入到服務平臺,否則,登錄失敗。圖三 消息加密、解密、認證流程圖備注:登錄各方發(fā)送消息時,要發(fā)送“驗證碼”、“明文”、“隨機數(shù)”,其中明文要通過AES加密和解密,驗證碼用來驗證信息的完整性,若解密之后的明文的驗證碼和接收到的驗證碼不同則舍棄該信息,若相同,則發(fā)布信息到服務平臺。隨機數(shù)的產(chǎn)生是用來防止重放攻擊。二以下是該系統(tǒng)主要界面:1、首先運行服務器,后啟動服務器。圖一 金融服務系統(tǒng)服務器管理界面 如果未開啟服務器,系統(tǒng)將會出現(xiàn)如下圖的提示:圖二 登入失敗頁面2.客戶登錄圖三 代理和客戶登入頁面?zhèn)渥ⅲ涸谶@個頁面我們用戶名和密碼都設置了非空的約束,如果輸入錯誤的密碼的用戶名,系統(tǒng)將會提示“用戶名或密碼不能為空”。你也可以點擊“注冊”進入注冊頁面。3.客戶注冊 圖四 代理或客戶注冊頁面?zhèn)渥ⅲ涸谶@個頁面我們設置了邀請碼的功能,系統(tǒng)指定一個只有代理擁有的特定邀請碼, 當客戶在注冊的時候需要代理代其輸入邀請碼,這在一定程度上限制了非任何人均可進入金融消息系統(tǒng)。在注冊和登入成功后,服務器將會提示如下消息圖五 注冊和登入成功后服務器頁面4金融消息發(fā)布此時頁面將跳轉(zhuǎn)到金融消息發(fā)布頁面,如圖所示: 圖六 金融融消息發(fā)布頁面接下來,你就可以在這里接受和發(fā)布消息了:圖七 整體效果圖備注:當代理發(fā)送消息時系統(tǒng)根據(jù)MD5加密算法和AES加密、解密算法生成一系列密文和密鑰。第五章 總結(jié)通過這次金融信息服務系統(tǒng)的開發(fā),我們實現(xiàn)了金融服務人員向其客戶發(fā)布信息的功能,并且保證了這些信息的保密性和完整性。在系統(tǒng)的設計上我們主要考慮兩大方面問題:(1)制作完整的金融信息系統(tǒng)主要制作登錄、注冊、信息發(fā)布窗體、服務器窗體以及各窗體之間的鏈接與監(jiān)聽,使之能進行完整的信息交互過程。(2)對金融信息服務系統(tǒng)進行安全性設置本模塊主要考慮的是服務器對用戶密碼的保護功能、發(fā)送端與接收端信息交互過程的加密功能、信息傳輸過程中的完整性判斷功能、接收方信息傳輸過程中的防重放功能。但是我們這個系統(tǒng)也存在著一定的缺陷,比如客戶如果想和某一客戶或者服務人員溝通時,會使所有登錄人員都看到其溝通信息,我認為我們可以進一步完善底層通訊協(xié)議,使能夠更好的處理數(shù)據(jù)的發(fā)送和接受,需做到以下幾點:(1)多線程下的對臨界數(shù)據(jù)訪問的問題。(2)對本地用戶名和密碼的保存問題,在本程序中,沒有對本地用戶名和密碼設置緩存。也就是說用戶登錄一次后,系統(tǒng)不會自動的保存下用戶的用戶名和密碼,使得用戶在第二次進入系統(tǒng)時還要重新輸入用戶名。(3)在客戶端系統(tǒng),功能的設置有待進一步豐富,功能的實現(xiàn)還有待完善和改進。參考文獻【1】辛運幃 饒一梅 馬素霞 java程序設計 清華大學出版社【2】張煥國 王張宜 密碼學引論 武漢大學出版社【3】/view/706946.htm【4】/view/5fa7941755270722192ef7a6.html【5】/view/32702.htm#sub4924698【6】/view/20258.html附錄(代碼)Client.java/客戶端程序import javax.swing.*;import java.awt.*;import java.awt.event.*;import .*;import java.io.*;import java.util.*;public class Client extends JFrame implements ActionListener JPanel pnlLogin; JButton btnLogin, btnRegister,btnexit; JLabel lblServer, lblPort, lblName, lblPassword, lblLogo; JTextField tfName, tfServer, tfPort; JPasswordField pwd; String strServerIp; int port; /用于將窗口定位 / Dimension scnSize = Toolkit.getDefaultToolkit().getScreenSize(); private Dimension scrnsize; private Toolkit toolkit = Toolkit.getDefaultToolkit(); public Client() /構(gòu)造方法 super(登錄金融服務系統(tǒng)); pnlLogin = new JPanel(); this.getContentPane().add(pnlLogin); lblServer = new JLabel(服務器:); lblPort = new JLabel(端口:); lblPort.setVisible(false); lblName = new JLabel(用戶名:); lblPassword = new JLabel(密 碼:); tfServer = new JTextField(20); tfServer.setText(); tfPort = new JTextField(4); tfPort.setText(8888); tfPort.setVisible(false); tfName = new JTextField(20); pwd = new JPasswordField(20); btnLogin = new JButton(登錄); btnRegister = new JButton(注冊); btnexit=new JButton(取消); pnlLogin.setLayout(null); /組件用手動布局 lblServer.setBounds(80, 140, 50, 30);tfServer.setBounds(80, 170, 120, 25); /lblPort.setBounds(175, 15, 30, 30); /tfPort.setBounds(210, 15, 40, 25); lblName.setBounds(80, 200, 100, 30);tfName.setBounds(80, 230, 120, 25); lblPassword.setBounds(80, 260, 100, 30);pwd.setBounds(80, 290, 120, 25);btnLogin.setBounds(30, 320, 80, 25);btnRegister.setBounds(110, 320, 80, 25);btnexit.setBounds(190, 320, 80, 25); pnlLogin.add(lblServer); pnlLogin.add(tfServer); pnlLogin.add(lblPort); pnlLogin.add(tfPort); pnlLogin.add(lblName); pnlLogin.add(tfName); pnlLogin.add(lblPassword); pnlLogin.add(pwd); pnlLogin.add(btnLogin); pnlLogin.add(btnexit); pnlLogin.add(btnRegister); lblName.setForeground(Color.BLACK);lblPassword.setForeground(Color.BLACK);/ 設置背景圖片Icon logo1 = new ImageIcon(imagesloginlogo.jpg);lblLogo = new JLabel(logo1);lblLogo.setBounds(0, 0, 300, 140);pnlLogin.add(lblLogo); /設置登錄窗口 setResizable(false); setSize(300,400); setVisible(true); / setLocation(scnSize.width - getWidth()/2,(scnSize.height - getHeight()/2);scrnsize = toolkit.getScreenSize();setLocation(scrnsize.width / 2 - this.getWidth() / 2, scrnsize.height/ 2 - this.getHeight() / 2);Image img = toolkit.getImage(imagesappico.jpg);setIconImage(img); /為按鈕注冊監(jiān)聽 btnexit.addActionListener(this); btnLogin.addActionListener(this); btnRegister.addActionListener(this); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); /按鈕監(jiān)聽響應 public void actionPerformed(ActionEvent ae) Object source = ae.getSource(); strServerIp = tfServer.getText(); try port = Integer.valueOf(tfPort.getText(); if (port =6000) JOptionPane.showMessageDialog(null, 請使用大于6000的端口號); return; catch (NumberFormatException e) JOptionPane.showMessageDialog(null, 輸入的端口號不是整數(shù)); if (source.equals(btnLogin) if (tfName.getText().equals() | pwd.getPassword().equals() JOptionPane.showMessageDialog(null, 用戶名或密碼不能為空); else login(); if (source.equals(btnRegister) this.dispose(); new Register(strServerIp, port); if (source.equals(btnexit) System.exit(0); public void login() /登錄 User data = new User(); = tfName.getText(); data.password = new String(pwd.getPassword(); try MD5Encrypt1 md5=new MD5Encrypt1(); data.password=md5.MD5(data.password); Socket sock = new Socket(strServerIp, port);/連接到服務器 ObjectOutputStream os = new ObjectOutputStream(sock.getOutputStream(); os.writeObject( (User) data); /將登錄用戶信息送到服務器socket /讀來自服務器socket的登錄狀態(tài) BufferedReader br = new BufferedReader(new InputStreamReader(sock.getInputStream(); String status = br.readLine(); if (status.equals(登錄成功) new Room( (String), strServerIp, port); this.dispose(); /關閉流對象 os.close(); br.close(); sock.close(); else JOptionPane.showMessageDialog(null, status); os.close(); br.close(); sock.close(); catch (ConnectException e1) JOptionPane.showMessageDialog(null, 連接到指定服務器失敗!); catch (Exception e2) JOptionPane.showMessageDialog(null, 發(fā)生錯誤!); public static void main(String args) new Client(); MACEncrypt.javaimport java.security.MessageDigest;import javax.crypto.KeyGenerator;import javax.crypto.Mac;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;public class MACEncrypt /* 取得HMAC密鑰 */ public static String getMacKey() throws Exception KeyGenerator keyGenerator = KeyGenerator.getInstance(HmacMD5); SecretKey secretKey = keyGenerator.generateKey(); return new BASE64Encoder().encode(secretKey.getEncoded(); /* 執(zhí)行加密 */ public static byte encryptHMAC(byte data, String key) throws Exception byte bkey = new BASE64Decoder().decodeBuffer(key); SecretKey secretKey = new SecretKeySpec(bkey, HmacMD5); Mac mac = Mac.getInstance(secretKey.getAlgorithm(); mac.init(secretKey); return mac.doFinal(data); static String toHex(byte buffer) StringBuffer sb = new StringBuffer(buffer.length * 3); for (int i = 0; i 4, 16); sb.append(Character.forDigit(bufferi & 0x0f, 16); return sb.toString(); public static int getWordCount(String s) int length = 0 ; for ( int i = 0 ; i = 0 & ascii = 255 ) length + ; else length += 2 ; return length; public static void main(String args) String msg = 3123; byte data = msg.getBytes(); try System.out.println(msg); String key = getMacKey(); System.out.println(mac key: + key); System.out.println(mac: + toHex(encryptHMAC(data, key); System.out.println(mac length: + getWordCount(key); catch (Exception e) e.printStackTrace(); RandAESKey.javaimport java.util.*;public class RandAESKey private static Random randGen = null;private static char numbersAndLetters = null;private static Object initLock = new Object();public static String randomString(int length) if (length 1) return null; if (randGen = null) synchronized (initLock) if (randGen = null) randGen = new Random(); numbersAndLetters = (0123456789abcdefghijklmnopqrstuvwxyz + 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ).toCharArray(); char randBuffer = new charlength; for (int i=0; irandBuffer.length; i+) randBufferi = numbersAndLettersrandGen.nextInt(71); return new String(randBuffer);public static void main(String args)RandAESKey key=new RandAESKey();String str=key.randomString(16);System.out.println(str);Register.java/注冊窗口import javax.swing.*;import java.awt.*;import java.awt.event.*;import .*;import java.io.*;import java.util.*;public class Register extends JFrame implements ActionListener JPanel panel1; JLabel lblName,lblPwd,lblConfirmPwd,lblInvitePwd,lblLogo; JTextField tfName; JPasswordField pwd,confirmPwd,invitePwd; ButtonGroup btngGender; JButton btnOk, btnCancel, btnClear; String strIp; int port; /用于將窗口用于定位 Dimension srnSize = Toolkit.getDefaultToolkit().getScreenSize(); public Register(String ip,int p) super(金融服務系統(tǒng)注冊); strIp = ip; port = p; panel1 = new JPanel(); this.getContentPane().add(panel1); lblName = new JLabel(客 戶 名:); lblPwd = new JLabel(密 碼:); lblConfirmPwd = new JLabel(確認密碼:); lblInvitePwd = new JLabel(邀 請 碼:); tfName = new JTextField(30); pwd = new JPasswordField(30); confirmPwd = new JPasswordField(30); invitePwd = new JPasswordField(30); btngGender = new ButtonGroup(); btnOk = new JButton(提交); btnCancel = new JButton(返回); btnClear = new JButton(重置); /布局組件 panel1.setLayout(null); /組件用手動布局 lblName.setBounds(20, 140, 60, 30); tfName.setBounds(80,145, 180, 23); lblPwd.setBounds(20, 180, 60, 30); pwd.setBounds(80,185, 185, 23); lblConfirmPwd.setBounds(20, 220, 60, 30); confirmPwd.setBounds(80, 225, 180, 23); lblInvitePwd.setBounds(20, 260, 60, 30); invitePwd.setBounds(80, 265, 180, 23); btnOk.setBounds(43, 300, 60, 25); btnClear.setBounds(113, 300, 60, 25); btnCancel.setBounds(183, 300, 60, 25); panel1.add(lblName); panel1.add(lblPwd); panel1.add(lblConfirmPwd); panel1.add(lblInvitePwd); panel1.add(tfName); panel1.add(pwd); panel1.add(confirmPwd); panel1.add(invitePwd); panel1.add(btnOk); panel1.add(btnCancel); panel1.add(btnClear);panel1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論