信息與網(wǎng)絡(luò)安全_第1頁(yè)
信息與網(wǎng)絡(luò)安全_第2頁(yè)
信息與網(wǎng)絡(luò)安全_第3頁(yè)
信息與網(wǎng)絡(luò)安全_第4頁(yè)
信息與網(wǎng)絡(luò)安全_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、信息與網(wǎng)絡(luò)安全實(shí)驗(yàn)報(bào)告一、實(shí)驗(yàn)名稱(chēng)設(shè)計(jì)數(shù)字簽名二、實(shí)驗(yàn)?zāi)康睦斫鈹?shù)字簽名,學(xué)會(huì)設(shè)計(jì)數(shù)字簽名三、實(shí)驗(yàn)原理1:調(diào)用.NET2.0的MAKECERT創(chuàng)建含有私鑰的數(shù)字證書(shū),并存儲(chǔ)到個(gè)人證書(shū)區(qū);2:將該證書(shū)導(dǎo)出為pfx文件,并為其指定一個(gè)用來(lái)打開(kāi)pfx文件的password;3:讀取pfx文件,導(dǎo)出pfx中公鑰和私鑰;4:用pfx證書(shū)中的公鑰進(jìn)行數(shù)據(jù)的加密,用私鑰進(jìn)行數(shù)據(jù)的解密。四 、簽名算法:using System;using System.Text;using System.Security.Cryptography;namespace DigitalSignature /信息和簽名的封包 pub

2、lic struct DS public byte data; public byte signature; class Program static DSACryptoServiceProvider dsa = new DSACryptoServiceProvider(); /創(chuàng)建了公鑰和私鑰對(duì) /創(chuàng)建數(shù)字簽名 DS CreateSignature(string strData) SHA1Managed sha1 = new SHA1Managed(); SHA1Managed sha1 = new SHA1Managed(); DSASignatureFormatter sigFormat

3、ter = new DSASignatureFormatter(dsa); byte data_Bytes = Encoding.ASCII.GetBytes(strData); byte hash_Bytes = sha1.ComputeHash(data_Bytes); sigFormatter.SetHashAlgorithm("SHA1"); byte signedHash = sigFormatter.CreateSignature(hash_Bytes); DS ds = new DS(); ds.data = hash_Bytes; ds.signature

4、= signedHash; return ds; /驗(yàn)證數(shù)字簽名 bool VerifySignature(DS ds) byte remote_HashedValue = ds.data; byte remote_SignedHash = ds.signature; DSASignatureDeformatter sigDeformatter = new DSASignatureDeformatter(dsa); sigDeformatter.SetHashAlgorithm("SHA1"); if (sigDeformatter.VerifySignature(remo

5、te_HashedValue, remote_SignedHash) return true; return false; static void Main(string args) string strMsg = "JGLRIEHDKVJFLHGJGYRKPYEVCNADWQKGLBUFOWDT" /報(bào)文文本 DS ds = new DS(); Program prog = new Program(); ds = prog.CreateSignature(strMsg); /模擬簽名在傳輸途中遭到破壞或修改 /. /ds.signature = new byte40; i

6、f (prog.VerifySignature(ds) /驗(yàn)證通過(guò) Console.WriteLine("The signature used to sign the hash has been verified."); else /驗(yàn)證未通過(guò) Console.WriteLine("The signature used to sign the hash doesn't match the hash."); Console.ReadLine(); 五、對(duì)數(shù)字簽名算法的理解數(shù)字簽名是非對(duì)稱(chēng)密鑰加密技術(shù)與數(shù)字摘要技術(shù)的應(yīng)用。數(shù)字簽名有兩種功效:一是能確

7、定消息確實(shí)是由發(fā)送方簽名并發(fā)出來(lái)的,因?yàn)閯e人假冒不了發(fā)送方的簽名。二是數(shù)字簽名能確定消息的完整性。因?yàn)閿?shù)字簽名的特點(diǎn)是它代表了文件的特征,文件如果發(fā)生改變,數(shù)字簽名的值也將發(fā)生變化。不同的文件將得到不同的數(shù)字簽名。 一次數(shù)字簽名涉及到一個(gè)哈希函數(shù)、發(fā)送者的公鑰、發(fā)送者的私鑰?!币?、實(shí)驗(yàn)名稱(chēng)PGP算法二、 實(shí)驗(yàn)?zāi)康牧私釶GP的工作原理,掌握PGP算法的使用三、 實(shí)驗(yàn)原理1. 發(fā)送方創(chuàng)建消息2. 發(fā)送方生成消息的160位的散列碼3. 用發(fā)送方私鑰對(duì)散列進(jìn)行RSA加密,加到消息上4. 傳輸數(shù)據(jù)5. 接收方用發(fā)送方的公鑰對(duì)加密部分進(jìn)行RSA解密6. 接收方將剩余數(shù)據(jù)生成160位散列碼7. 生成散列與

8、解密散列進(jìn)行比較,如果匹配,則認(rèn)證成功四 源程序 :import java.io.*;import java.security.*;import java.lang.reflect.*;import javax.crypto.*;import javax.crypto.spec.*;public class DecryptStart extends ClassLoader / 這些對(duì)象在構(gòu)造函數(shù)中設(shè)置, / 以后loadClass()方法將利用它們解密類(lèi) private SecretKey key; private Cipher cipher; / 構(gòu)造函數(shù):設(shè)置解密所需要的對(duì)象 public

9、 DecryptStart( SecretKey key ) throws GeneralSecurityException, IOException this.key = key; String algorithm = "DES" SecureRandom sr = new SecureRandom(); System.err.println( "DecryptStart: creating cipher" ); cipher = Cipher.getInstance( algorithm ); cipher.init( Cipher.DECRYPT_

10、MODE, key, sr ); / main過(guò)程:我們要在這里讀入密匙,創(chuàng)建DecryptStart的 / 實(shí)例,它就是我們的定制ClassLoader。 / 設(shè)置好ClassLoader以后,我們用它裝入應(yīng)用實(shí)例, / 最后,我們通過(guò)Java Reflection API調(diào)用應(yīng)用實(shí)例的main方法 static public void main( String args ) throws Exception String keyFilename = args0; String appName = args1; / 這些是傳遞給應(yīng)用本身的參數(shù) String realArgs = new St

11、ringargs.length-2; System.arraycopy( args, 2, realArgs, 0, args.length-2 ); / 讀取密匙 System.err.println( "DecryptStart: reading key" ); byte rawKey = Util.readFile( keyFilename ); DESKeySpec dks = new DESKeySpec( rawKey ); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance( "DES

12、" ); SecretKey key = keyFactory.generateSecret( dks ); / 創(chuàng)建解密的ClassLoader DecryptStart dr = new DecryptStart( key ); / 創(chuàng)建應(yīng)用主類(lèi)的一個(gè)實(shí)例 / 通過(guò)ClassLoader裝入它 System.err.println( "DecryptStart: loading "+appName+"" ); Class clasz = dr.loadClass( appName ); / 最后,通過(guò)Reflection API調(diào)用應(yīng)用實(shí)例

13、 / 的main()方法 / 獲取一個(gè)對(duì)main()的引用 String proto = new String1; Class mainArgs = (new String1).getClass() ; Method main = clasz.getMethod( "main", mainArgs ); / 創(chuàng)建一個(gè)包含main()方法參數(shù)的數(shù)組 Object argsArray = realArgs ; System.err.println( "DecryptStart: running "+appName+".main()" );

14、 / 調(diào)用main() main.invoke( null, argsArray ); public Class loadClass( String name, boolean resolve ) throws ClassNotFoundException try / 我們要?jiǎng)?chuàng)建的Class對(duì)象 Class clasz = null; / 必需的步驟1:如果類(lèi)已經(jīng)在系統(tǒng)緩沖之中 / 我們不必再次裝入它 clasz = findLoadedClass( name ); if (clasz != null) return clasz; / 下面是定制部分 try / 讀取經(jīng)過(guò)加密的類(lèi)文件 byte

15、 classData = Util.readFile( name+".class" ); if (classData != null) / 解密. byte decryptedClassData = cipher.doFinal( classData ); / . 再把它轉(zhuǎn)換成一個(gè)類(lèi) clasz = defineClass( name, decryptedClassData, 0, decryptedClassData.length ); System.err.println( "DecryptStart: decrypting class "+name

16、+"" ); catch( FileNotFoundException fnfe ) / 必需的步驟2:如果上面沒(méi)有成功 / 我們嘗試用默認(rèn)的ClassLoader裝入它 if (clasz = null) clasz = findSystemClass( name ); / 必需的步驟3:如有必要,則裝入相關(guān)的類(lèi) if (resolve && clasz != null) resolveClass( clasz ); / 把類(lèi)返回給調(diào)用者 return clasz; catch( IOException ie ) throw new ClassNotFoundException( ie.toString(); catch( GeneralSecurityExc

溫馨提示

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

評(píng)論

0/150

提交評(píng)論