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

下載本文檔

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

文檔簡介

1、信息與網(wǎng)絡(luò)安全實(shí)驗(yàn)報告一、實(shí)驗(yàn)名稱設(shè)計(jì)數(shù)字簽名二、實(shí)驗(yàn)?zāi)康睦斫鈹?shù)字簽名,學(xué)會設(shè)計(jì)數(shù)字簽名三、實(shí)驗(yàn)原理1:調(diào)用.NET2.0的MAKECERT創(chuàng)建含有私鑰的數(shù)字證書,并存儲到個人證書區(qū);2:將該證書導(dǎo)出為pfx文件,并為其指定一個用來打開pfx文件的password;3:讀取pfx文件,導(dǎo)出pfx中公鑰和私鑰;4:用pfx證書中的公鑰進(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)建了公鑰和私鑰對 /創(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" /報文文本 DS ds = new DS(); Program prog = new Program(); ds = prog.CreateSignature(strMsg); /模擬簽名在傳輸途中遭到破壞或修改 /. /ds.signature = new byte40; i

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

7、定消息確實(shí)是由發(fā)送方簽名并發(fā)出來的,因?yàn)閯e人假冒不了發(fā)送方的簽名。二是數(shù)字簽名能確定消息的完整性。因?yàn)閿?shù)字簽名的特點(diǎn)是它代表了文件的特征,文件如果發(fā)生改變,數(shù)字簽名的值也將發(fā)生變化。不同的文件將得到不同的數(shù)字簽名。 一次數(shù)字簽名涉及到一個哈希函數(shù)、發(fā)送者的公鑰、發(fā)送者的私鑰?!币?、實(shí)驗(yàn)名稱PGP算法二、 實(shí)驗(yàn)?zāi)康牧私釶GP的工作原理,掌握PGP算法的使用三、 實(shí)驗(yàn)原理1. 發(fā)送方創(chuàng)建消息2. 發(fā)送方生成消息的160位的散列碼3. 用發(fā)送方私鑰對散列進(jìn)行RSA加密,加到消息上4. 傳輸數(shù)據(jù)5. 接收方用發(fā)送方的公鑰對加密部分進(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 / 這些對象在構(gòu)造函數(shù)中設(shè)置, / 以后loadClass()方法將利用它們解密類 private SecretKey key; private Cipher cipher; / 構(gòu)造函數(shù):設(shè)置解密所需要的對象 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過程:我們要在這里讀入密匙,創(chuàng)建DecryptStart的 / 實(shí)例,它就是我們的定制ClassLoader。 / 設(shè)置好ClassLoader以后,我們用它裝入應(yīng)用實(shí)例, / 最后,我們通過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)用主類的一個實(shí)例 / 通過ClassLoader裝入它 System.err.println( "DecryptStart: loading "+appName+"" ); Class clasz = dr.loadClass( appName ); / 最后,通過Reflection API調(diào)用應(yīng)用實(shí)例

13、 / 的main()方法 / 獲取一個對main()的引用 String proto = new String1; Class mainArgs = (new String1).getClass() ; Method main = clasz.getMethod( "main", mainArgs ); / 創(chuàng)建一個包含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 / 我們要創(chuàng)建的Class對象 Class clasz = null; / 必需的步驟1:如果類已經(jīng)在系統(tǒng)緩沖之中 / 我們不必再次裝入它 clasz = findLoadedClass( name ); if (clasz != null) return clasz; / 下面是定制部分 try / 讀取經(jīng)過加密的類文件 byte

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

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

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論