2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  上海電力學(xué)院</b></p><p><b>  安全協(xié)議大作業(yè)</b></p><p>  題目: 基于OpenSSL/CryptoAPI的數(shù)字簽名系統(tǒng)設(shè)計與實(shí)現(xiàn)          </p><

2、;p>  學(xué)號: 20103277 學(xué)生姓名: 李鑫 </p><p>  院系:  計算機(jī)科學(xué)與技術(shù)學(xué)院   </p><p>  專業(yè):  信息安全 </p><p>  班 級: 2010251 </p><p>  2013年 12 月 13 日</p>&

3、lt;p>  基于OpenSSL/CryptoAPI的數(shù)字簽名系統(tǒng)設(shè)計與實(shí)現(xiàn)</p><p><b>  李鑫</b></p><p> ?。ㄉ虾k娏W(xué)院 信息安全系,上海市 201300)</p><p>  摘要:數(shù)字簽名(又稱公鑰數(shù)字簽名、電子簽章)是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領(lǐng)域的技術(shù)實(shí)現(xiàn),用于鑒別數(shù)字信

4、息的方法。一套數(shù)字簽名通常定義兩種互補(bǔ)的運(yùn)算,一個用于簽名,另一個用于驗(yàn)證。數(shù)字簽名,就是只有信息的發(fā)送者才能產(chǎn)生的別人無法偽造的一段數(shù)字串,這段數(shù)字串同時也是對信息的發(fā)送者發(fā)送信息真實(shí)性的一個有效證明。數(shù)字簽名是非對稱密鑰加密技術(shù)與數(shù)字摘要技術(shù)的應(yīng)用。數(shù)字簽名了的文件的完整性是很容易驗(yàn)證的(不需要騎縫章,騎縫簽名,也不需要筆跡專家),而且數(shù)字簽名具有不可抵賴性(不需要筆跡專家來驗(yàn)證)。</p><p>  關(guān)鍵

5、字:數(shù)字簽名;簽名驗(yàn)證;哈希算法</p><p><b>  引言</b></p><p>  1. CryptoAPI簡介</p><p>  CryptoAPI是一組函數(shù),為了完成數(shù)學(xué)計算,必須具有密碼服務(wù)提供者模塊(CSP)。Microsoft通過捆綁RSA Base Provider在操作系統(tǒng)級提供一個CSP,使用RSA公司的公鑰加密算

6、法,更多的CSP可以根據(jù)需要增加到應(yīng)用中。事實(shí)上,CSP有可能與特殊硬件設(shè)備(如智能卡)一起來進(jìn)行數(shù)據(jù)加密。CryptoAPI接口允許簡單的函數(shù)調(diào)用來加密數(shù)據(jù),交換公鑰,散列一個消息來建立摘要以及生成數(shù)字簽名。它還提供高級的管理操作,如從一組可能的CSP中使用一個CSP。此外,CryptoAPI還為許多高級安全性服務(wù)提供了基礎(chǔ),包括用于電子商務(wù)的SET,用于加密客戶機(jī)/服務(wù)器消息的PCT,用于在各個平臺之間來回傳遞機(jī)密數(shù)據(jù)和密鑰的PFX

7、,代碼簽名等等。</p><p>  目前支持CryptoAPI的Windows系統(tǒng)有:Windows 95 OSR2、Windows NT SP3及后續(xù)版本、Windows 98、Windows 2000等。CryptoAPI的配置信息存儲在注冊表中,包括如下密鑰:</p><p>  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft \ Cryptograph

8、y \Defaults</p><p>  HKEY_CURRENT_USER\ Software \ Microsoft \ Cryptography \Providers</p><p><b>  2. 數(shù)據(jù)加密原理</b></p><p>  CryptoAPI使用兩種密鑰:會話密鑰與公共/私人密鑰對。會話密鑰使用相同的加密和解密密鑰,

9、這種算法較快,但必須保證密鑰的安全傳遞。公共/私人密鑰對使用一個公共密鑰和一個私人密鑰,私人密鑰只有專人才能使用,公共密鑰可以廣泛傳播。如果密鑰對中的一個用于加密,另一個一定用于解密。公共/私人密鑰對算法很慢,一般只用于加密小批量數(shù)據(jù),例如用于加密會話密鑰。</p><p>  CryptoAPI支持兩種基本的編碼方法:流式編碼和塊編碼。流式編碼在明碼文本的每一位上創(chuàng)建編碼位,速度較快,但安全性較低。塊編碼在一個

10、完整的塊上(一般為64位)工作,需要使用填充的方法對要編碼的數(shù)據(jù)進(jìn)行舍入,以組成多個完整的塊。這種算法速度較慢,但更安全。</p><p><b>  實(shí)驗(yàn)原理</b></p><p><b>  基本介紹</b></p><p>  簡單地說,所謂數(shù)字簽名就是附加在數(shù)據(jù)單元上的一些數(shù)據(jù),或是對數(shù)據(jù)單元所作的密碼變換。這種

11、數(shù)據(jù)或變換允許數(shù)據(jù)單元的接收者用以確認(rèn)數(shù)據(jù)單元的來源和數(shù)據(jù)單元的完整性并保護(hù)數(shù)據(jù),防止被人(例如接收者)進(jìn)行偽造。它是對電子形式的消息進(jìn)行簽名的一種方法,一個簽名消息能在一個通信網(wǎng)絡(luò)中傳輸?;诠€密碼體制和私鑰密碼體制都可以獲得數(shù)字簽名,主要是基于公鑰密碼體制的數(shù)字簽名。包括普通數(shù)字簽名和特殊數(shù)字簽名。普通數(shù)字簽名算法有RSA、ElGamal、Fiat-Shamir、Guillou- Quisquarter、Schnorr、Ong-S

12、chnorr-Shamir數(shù)字簽名算法、Des/DSA,橢圓曲線數(shù)字簽名算法和有限自動機(jī)數(shù)字簽名算法等。特殊數(shù)字簽名有盲簽名、代理簽名、群簽名、不可否認(rèn)簽名、公平盲簽名、門限簽名、具有消息恢復(fù)功能的簽名等,它與具體應(yīng)用環(huán)境密切相關(guān)。顯然,數(shù)字簽名的應(yīng)用涉及到法律問題,美國聯(lián)邦政府基于有限域上的離散對數(shù)問題制定了自己的數(shù)字簽名標(biāo)準(zhǔn)(DSS)。</p><p><b>  主要功能</b><

13、;/p><p>  保證信息傳輸?shù)耐暾?、發(fā)送者的身份認(rèn)證、防止交易中的抵賴發(fā)生。</p><p>  數(shù)字簽名技術(shù)是將摘要信息用發(fā)送者的私鑰加密,與原文一起傳送給接收者。接收者只有用發(fā)送者的公鑰才能解密被加密的摘要信息,然后用HASH函數(shù)對收到的原文產(chǎn)生一個摘要信息,與解密的摘要信息對比。如果相同,則說明收到的信息是完整的,在傳輸過程中沒有被修改,否則說明信息被修改過,因此數(shù)字簽名能夠驗(yàn)證信

14、息的完整性。</p><p>  數(shù)字簽名是個加密的過程,數(shù)字簽名驗(yàn)證是個解密的過程。</p><p><b>  簽名過程</b></p><p>  “發(fā)送報文時,發(fā)送方用一個哈希函數(shù)從報文文本中生成報文摘要,然后用自己的私人密鑰對這個摘要進(jìn)行加密,這個加密后的摘要將作為報文的數(shù)字簽名和報文一起發(fā)送給接收方,接收方首先用與發(fā)送方一樣的哈希函

15、數(shù)從接收到的原始報文中計算出報文摘要,接著再用發(fā)送方的公用密鑰來對報文附加的數(shù)字簽名進(jìn)行解密,如果這兩個摘要相同、那么接收方就能確認(rèn)該數(shù)字簽名是發(fā)送方的。</p><p>  數(shù)字簽名有兩種功效:一是能確定消息確實(shí)是由發(fā)送方簽名并發(fā)出來的,因?yàn)閯e人假冒不了發(fā)送方的簽名。二是數(shù)字簽名能確定消息的完整性。因?yàn)閿?shù)字簽名的特點(diǎn)是它代表了文件的特征,文件如果發(fā)生改變,數(shù)字簽名的值也將發(fā)生變化。不同的文件將得到不同的數(shù)字簽名

16、。 一次數(shù)字簽名涉及到一個哈希函數(shù)、發(fā)送者的公鑰、發(fā)送者的私鑰?!?lt;/p><p>  數(shù)字簽名:發(fā)送方用自己的密鑰對報文X進(jìn)行Encrypt(編碼)運(yùn)算,生成不可讀取的密文Dsk,然后將Dsk傳送給接收方,接收方為了核實(shí)簽名,用發(fā)送方的公用密鑰進(jìn)行Decrypt(解碼)運(yùn)算,還原報文。</p><p><b>  設(shè)計流程圖</b></p><p

17、><b>  實(shí)驗(yàn)設(shè)備</b></p><p>  PC機(jī),Windows XP,VC++6.0. </p><p><b>  實(shí)驗(yàn)過程</b></p><p><b>  實(shí)驗(yàn)流程圖</b></p><p><b>  必要的截圖</b><

18、/p><p><b>  實(shí)驗(yàn)總結(jié)</b></p><p>  由于過于復(fù)雜的加密算法實(shí)現(xiàn)起來非常困難,所以在過去,許多應(yīng)用程序只能使用非常簡單的加密技術(shù),這樣做的結(jié)果就是加密的數(shù)據(jù)很容易被人破譯。而使用Microsoft提供的加密應(yīng)用程序接口(即Cryptography API),或稱CryptoAPI,可以方便地在應(yīng)用程序中加入強(qiáng)大的加密功能,而不必考慮基本的算法。本

19、文將對CryptoAPI及其使用的數(shù)據(jù)加密原理作一簡單的介紹,然后給出了用CryptoAPI編寫加密程序的大致步驟,最后以一個文件的加密、解密程序?yàn)槔菔綜ryptoAPI的部分功能。</p><p>  利用了CryptAPI,加密解密功能變得異常簡單,只需要調(diào)用相關(guān)的函數(shù)即可,而不用關(guān)心具體過程,開發(fā)商已經(jīng)為我們做了相關(guān)的內(nèi)部工作。用它來實(shí)現(xiàn)數(shù)字簽名,也變得十分便捷,只需要按照微軟的要求調(diào)用相關(guān)的函數(shù)就可以了

20、,實(shí)驗(yàn)過程中利用了網(wǎng)上的資料和書本的光盤資料。雖然寫程序過程中遇到了各種問題,但是在網(wǎng)上收集資料后都予以解決了。經(jīng)過學(xué)習(xí),對CryptAPI編程有了一點(diǎn)了解,需要學(xué)習(xí)的東西還很多。</p><p><b>  實(shí)驗(yàn)源代碼:</b></p><p>  在VC++6.0下實(shí)現(xiàn)基于哈希的數(shù)字簽名。</p><p>  聲明的頭文件和函數(shù):</

21、p><p>  #include <stdio.h></p><p>  #include <windows.h></p><p>  #include <wincrypt.h></p><p>  #include <cstring></p><p><b>  

22、//函數(shù)申明</b></p><p>  void HandleError(char *s);</p><p>  HCRYPTPROV GetCryptProv();</p><p>  void print(char *s);</p><p><b>  變量聲明:</b></p><

23、p>  // 變量申明及初始化</p><p>  HCRYPTPROV hProv;</p><p>  // BYTE *pbBuffer= (BYTE *)"The data that is to be hashed and signed.";</p><p>  // DWORD dwBufferLen = strlen((ch

24、ar *)pbBuffer)+1;</p><p>  BYTE *pbBuffer;</p><p>  DWORD dwBufferLen;</p><p>  HCRYPTHASH hHash;</p><p>  HCRYPTKEY hKey;</p><p>  HCRYPTKEY hPubKey;</

25、p><p>  BYTE *pbKeyBlob; </p><p>  BYTE *pbSignature;</p><p>  DWORD dwSigLen;</p><p>  DWORD dwBlobLen;</p><p>  CString string;</p><p> 

26、 LPTSTR szDescription = "Test Data Description";</p><p><b>  初始化代碼:</b></p><p>  BOOL CMyDlg::OnInitDialog()</p><p><b>  {</b></p><p>

27、  // TODO: Add extra initialization here</p><p>  m_edit="我是李鑫,來自2010251班,學(xué)號20103277,有事您說話!";</p><p>  SetDlgItemText(IDC_EDIT1,m_edit);</p><p>  GetDlgItem(IDOK2)->Ena

28、bleWindow(FALSE);</p><p>  return TRUE; // return TRUE unless you set the focus to a control</p><p><b>  }</b></p><p><b>  添加的代碼:</b></p><p> 

29、 //////////////////////////////////////////////////////////////////////////</p><p>  void CMyDlg::OnOK() </p><p><b>  {</b></p><p>  // TODO: Add extra validation here&l

30、t;/p><p>  string="";</p><p>  UpdateData(TRUE);</p><p>  pbBuffer=(BYTE *)m_edit.GetBuffer(m_edit.GetLength());</p><p>  dwBufferLen=strlen(m_edit);</p>

31、<p>  //-------------------------------------------------------------------</p><p>  // 獲取CSP句柄</p><p>  hProv = GetCryptProv();</p><p>  //------------------------------------

32、-------------------------------</p><p>  // 獲取密鑰對,其中的私鑰用于創(chuàng)建數(shù)字簽名,公鑰將用于驗(yàn)證簽名。</p><p>  if (CryptGenKey(</p><p><b>  hProv,</b></p><p>  AT_SIGNATURE,</p>

33、<p><b>  0,</b></p><p><b>  &hKey))</b></p><p><b>  {</b></p><p>  print("簽名密鑰對已經(jīng)被獲取.\n");</p><p><b>  }&

34、lt;/b></p><p><b>  else</b></p><p><b>  {</b></p><p>  HandleError("創(chuàng)建簽名密鑰出錯.\n");</p><p><b>  }</b></p><p&g

35、t;  //-------------------------------------------------------------------</p><p>  // 導(dǎo)出密鑰對的公鑰,確定密鑰塊數(shù)據(jù)長度</p><p>  if (CryptExportKey(</p><p><b>  hKey,</b></p>&l

36、t;p><b>  NULL,</b></p><p>  PUBLICKEYBLOB,</p><p><b>  0,</b></p><p><b>  NULL,</b></p><p>  &dwBlobLen))</p><p>

37、;<b>  {</b></p><p>  print("公鑰塊的數(shù)據(jù)長度已經(jīng)確定. \n");</p><p><b>  } </b></p><p><b>  else</b></p><p><b>  {</b></

38、p><p>  HandleError("計算密鑰數(shù)據(jù)塊長度出錯.");</p><p><b>  }</b></p><p>  //-------------------------------------------------------------------</p><p><b>

39、;  // 分配空間</b></p><p>  if (pbKeyBlob = (BYTE *)malloc(dwBlobLen))</p><p><b>  {</b></p><p>  print("已經(jīng)為此數(shù)據(jù)塊分配了內(nèi)存空間. \n");</p><p><b> 

40、 } </b></p><p><b>  else</b></p><p><b>  {</b></p><p>  HandleError("所需內(nèi)存不夠. \n");</p><p><b>  }</b></p><

41、p>  //-------------------------------------------------------------------</p><p>  // 導(dǎo)出密鑰對的公鑰</p><p>  if (CryptExportKey(</p><p><b>  hKey,</b></p><p>

42、<b>  NULL,</b></p><p>  PUBLICKEYBLOB,</p><p><b>  0,</b></p><p>  pbKeyBlob,</p><p>  &dwBlobLen))</p><p><b>  {</b&g

43、t;</p><p>  print("公鑰塊中的數(shù)據(jù)已經(jīng)寫入到導(dǎo)出塊中. \n");</p><p><b>  } </b></p><p><b>  else</b></p><p><b>  {</b></p><p> 

44、 HandleError("Error during CryptExportKey.");</p><p><b>  }</b></p><p>  //-------------------------------------------------------------------</p><p><b>

45、  // 創(chuàng)建哈希句柄</b></p><p>  if (CryptCreateHash(</p><p><b>  hProv,</b></p><p><b>  CALG_MD5,</b></p><p><b>  0,</b></p>&

46、lt;p><b>  0,</b></p><p><b>  &hHash))</b></p><p><b>  {</b></p><p>  print("哈希句柄已經(jīng)創(chuàng)建. \n");</p><p><b>  } <

47、;/b></p><p><b>  else</b></p><p><b>  {</b></p><p>  HandleError("哈希句柄創(chuàng)建失敗.\n");</p><p><b>  }</b></p><p>

48、  //-------------------------------------------------------------------</p><p>  // 計算輸入數(shù)據(jù)的哈希值</p><p>  if (CryptHashData(</p><p><b>  hHash,</b></p><p><

49、;b>  pbBuffer,</b></p><p>  dwBufferLen,</p><p><b>  0))</b></p><p><b>  {</b></p><p>  print("緩沖區(qū)中的數(shù)據(jù)已經(jīng)進(jìn)行了哈希處理.\n");</p&g

50、t;<p><b>  } </b></p><p><b>  else</b></p><p><b>  {</b></p><p>  HandleError("計算哈希值時出錯.\n");</p><p><b>  }&l

51、t;/b></p><p>  //-------------------------------------------------------------------</p><p>  // 確定簽名信息的長度</p><p>  dwSigLen= 0;</p><p>  if (CryptSignHash(</p>

52、;<p><b>  hHash,</b></p><p>  AT_SIGNATURE,</p><p>  szDescription,</p><p><b>  0,</b></p><p><b>  NULL,</b></p><p

53、>  &dwSigLen))</p><p><b>  {</b></p><p>  CString str1;</p><p>  str1.Format("簽名信息的長度 %d 找到.\n",dwSigLen);</p><p>  string+=str1;</p>

54、<p>  //print("簽名信息的長度 %d 找到.\n",dwSigLen);</p><p><b>  } </b></p><p><b>  else</b></p><p><b>  {</b></p><p>  Ha

55、ndleError("確定哈希簽名的長度時出錯.\n");</p><p><b>  }</b></p><p>  //-------------------------------------------------------------------</p><p><b>  // 分配空間</b&

56、gt;</p><p>  if (pbSignature = (BYTE *)malloc(dwSigLen))</p><p><b>  {</b></p><p>  print("給此簽名消息分配了內(nèi)存空間.\n");</p><p><b>  } </b></

57、p><p><b>  else</b></p><p><b>  {</b></p><p>  HandleError("簽名消息所需內(nèi)存不夠.");</p><p><b>  }</b></p><p>  //--------

58、-----------------------------------------------------------</p><p>  // 對哈希數(shù)據(jù)進(jìn)行數(shù)字簽名</p><p>  if (CryptSignHash(</p><p><b>  hHash,</b></p><p>  AT_SIGNATURE

59、,</p><p>  szDescription,</p><p><b>  0,</b></p><p>  pbSignature,</p><p>  &dwSigLen))</p><p><b>  {</b></p><p> 

60、 print("\n對哈希數(shù)據(jù)已經(jīng)進(jìn)行了數(shù)字簽名.\n");</p><p>  AfxMessageBox(string);</p><p><b>  } </b></p><p><b>  else</b></p><p><b>  {</b>&l

61、t;/p><p>  HandleError("哈希數(shù)據(jù)進(jìn)行數(shù)字簽名失敗.\n");</p><p><b>  }</b></p><p>  //-------------------------------------------------------------------</p><p>&l

62、t;b>  // 銷毀哈希句柄</b></p><p>  if (hHash)</p><p><b>  {</b></p><p>  CryptDestroyHash(hHash);</p><p><b>  }</b></p><p>  CSt

63、ring str2;</p><p>  str2+="哈希句柄已經(jīng)被銷毀.\n這個程序的簽名階段已經(jīng)完成.\n\n";</p><p>  AfxMessageBox(str2);</p><p>  // print("哈希句柄已經(jīng)被銷毀.\n");</p><p>  // print(&qu

64、ot;這個程序的簽名階段已經(jīng)完成.\n\n");</p><p>  GetDlgItem(IDOK2)->EnableWindow(TRUE);</p><p>  //CDialog::OnOK();</p><p><b>  }</b></p><p>  ///////////////////

65、///////////////////////////////////////////////////////</p><p>  void CMyDlg::OnCancel() </p><p><b>  {</b></p><p>  // TODO: Add extra cleanup here</p><p>

66、  CDialog::OnCancel();</p><p><b>  }</b></p><p>  void CMyDlg::OnOk2() </p><p><b>  {</b></p><p>  // TODO: Add your control notification handle

67、r code here</p><p>  string="";</p><p>  //-------------------------------------------------------------------</p><p>  // 從密鑰塊數(shù)據(jù)中導(dǎo)入公鑰到CSP。</p><p>  if (Crypt

68、ImportKey(</p><p><b>  hProv,</b></p><p>  pbKeyBlob,</p><p>  dwBlobLen,</p><p><b>  0,</b></p><p><b>  0,</b></p&g

69、t;<p>  &hPubKey))</p><p><b>  {</b></p><p>  print("公鑰已經(jīng)被導(dǎo)入.\n");</p><p><b>  } </b></p><p><b>  else</b></

70、p><p><b>  {</b></p><p>  HandleError("導(dǎo)入公鑰失敗.");</p><p><b>  }</b></p><p>  //----------------------------------------------------------

71、---------</p><p><b>  // 創(chuàng)建哈希句柄</b></p><p>  if (CryptCreateHash(</p><p><b>  hProv,</b></p><p><b>  CALG_MD5,</b></p><p&

72、gt;<b>  0,</b></p><p><b>  0,</b></p><p><b>  &hHash))</b></p><p><b>  {</b></p><p>  print("哈希句柄已經(jīng)被重新創(chuàng)建. \n&qu

73、ot;);</p><p><b>  } </b></p><p><b>  else</b></p><p><b>  {</b></p><p>  HandleError("重新創(chuàng)建哈希句柄時出錯.\n");</p><p&g

74、t;<b>  }</b></p><p>  //-------------------------------------------------------------------</p><p>  // 計算輸入數(shù)據(jù)的哈希值</p><p>  if (CryptHashData(</p><p><b&

75、gt;  hHash,</b></p><p><b>  pbBuffer,</b></p><p>  dwBufferLen,</p><p><b>  0))</b></p><p><b>  {</b></p><p>  pr

76、int("新的哈希值已經(jīng)計算出.\n");</p><p><b>  } </b></p><p><b>  else</b></p><p><b>  {</b></p><p>  HandleError("計算新的哈希值時出錯.\n&q

77、uot;);</p><p><b>  }</b></p><p>  //-------------------------------------------------------------------</p><p><b>  // 驗(yàn)證數(shù)字簽名</b></p><p>  if (C

78、ryptVerifySignature(</p><p><b>  hHash,</b></p><p>  pbSignature,</p><p><b>  dwSigLen,</b></p><p><b>  hPubKey,</b></p><

79、p>  szDescription,</p><p><b>  0))</b></p><p><b>  {</b></p><p>  print("\n此數(shù)字簽名已經(jīng)被驗(yàn)證.\n");</p><p>  AfxMessageBox(string);</p&

80、gt;<p><b>  } </b></p><p><b>  else</b></p><p><b>  {</b></p><p>  print("簽名未生效!\n");</p><p>  AfxMessageBox(string

81、);</p><p><b>  }</b></p><p>  //-------------------------------------------------------------------</p><p><b>  // 釋放內(nèi)存</b></p><p>  if (pbSigna

82、ture)</p><p><b>  {</b></p><p>  free(pbSignature);</p><p><b>  }</b></p><p>  if (hHash)</p><p><b>  {</b></p>

83、<p>  CryptDestroyHash(hHash);</p><p><b>  }</b></p><p>  if (hProv)</p><p><b>  {</b></p><p>  CryptReleaseContext(hProv,0);</p>&l

84、t;p><b>  }</b></p><p>  GetDlgItem(IDOK2)->EnableWindow(FALSE);</p><p><b>  }</b></p><p>  //獲取加密提供者句柄</p><p>  HCRYPTPROV GetCryptProv()&

85、lt;/p><p><b>  {</b></p><p>  HCRYPTPROV hCryptProv;</p><p>  //獲取加密提供者句柄</p><p>  if (CryptAcquireContext(</p><p>  &hCryptProv,</p>&

86、lt;p><b>  NULL,</b></p><p>  MS_DEF_PROV,</p><p>  PROV_RSA_FULL,</p><p><b>  0))</b></p><p><b>  {</b></p><p>  pri

87、nt("加密服務(wù)提供者句柄獲取成功!\n");</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  //重新建立一個新的密鑰集</p><p&g

88、t;  if (!CryptAcquireContext(&hCryptProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET))</p><p><b>  {</b></p><p>  HandleError("重新建立一個新的密鑰集出錯!");</p><p

89、><b>  }</b></p><p><b>  }</b></p><p>  return hCryptProv;</p><p><b>  }</b></p><p>  void HandleError(char *s)</p><p&g

90、t;<b>  {</b></p><p>  CString str;</p><p>  str.Format("程序執(zhí)行發(fā)生錯誤!\n%s\n錯誤代碼為: %x.\n程序終止執(zhí)行!\n",s,GetLastError());</p><p>  AfxMessageBox(str);</p><p&

91、gt;<b>  exit(1);</b></p><p><b>  }</b></p><p>  void print(char *s)</p><p><b>  {</b></p><p>  string+=s;</p><p><b&

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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

提交評論