網站建設| 數據庫類| 圖形圖象| 程序設計| 現代辦公| 操作系統| 考試認證| 網絡技術| 軟件工程| 電腦相關| 文學作品
網站開發| 網頁制作| 操作系統| 圖象圖形| 考試認證| 數據庫類| 程序設計| 硬件技術| 現代辦公| 網絡技術| 笑話頻道
 
您的位置: 電腦書庫首頁-> 電腦文摘-> 程序設計-> C++Builder-> 用C++ Builder創建數字簽名

用C++ Builder創建數字簽名
作者:佚名 來源:InterNet 加入時間:2005-1-28
相關文章
  • C++ Builder構建算二十四點小游戲
  • 用C++ Builder實現桌布自動更新
  • 用C++ Builder開發多層數據庫應用程序
  • C++ Builder中消息處理過程及應用
  • C++ Builder下數據庫報表Master/Detail關系功能的實現
  • 用C++ Builder實現網絡連接檢測程
  • 相關書籍:
  • C++ Builder 5.0經典入門
  • C++ Builder 3 核心編程技術
  • 如果你在網絡上傳遞一份數據,但卻存在著種種不安全的因素,使你對數據能否原封不動地到達目的地而心存疑惑,這時,你就可以給數據加上數字簽名,從而使對方可以通過驗證簽名來檢查你所傳過去的數據是否已被他人修改。

      一、程序原理

      數字簽名的工作原理還是比較簡單的,它是根據你所提供的原始數據,經過復雜的算法,產生特定的數據簽名,對方通過同樣的過程也產生簽名,如果數據已被修改,那么就不可能得到兩份一模一樣的簽名,從而就可判斷數據已被他人修改。編程人員利用Windows的CAPI接口,就可以實現數據的加密、解密和數字簽名。  

      二、程序清單

      下面用C++ Builder的語句來看一下它的具體實現過程。

      先來創建數字簽名,假定其數據來自于一個文件。

      //變量聲明:

      HCRYPTPROV hProv;

      // CSP的句柄

      HCRYPTHASH hHash;

      // 散列的句柄

      const int BUFFER=4096;

      // 緩沖區大小常數

      BYTE pBuffer[BUFFER];    

      // 存放讀文件內容的緩沖區

      BYTE pSignature[256];

      // 存放簽名的緩沖區

      DWORD dSignatureLen=256;

      // 簽名的長度

      TFileStream *sourceFile;

      // 一個文件流

      if(!CryptAcquireContext(&hProv,NULL,NULL,PROV—RSA—FULL,0))

      // 連接默認的CSP,接受它的句柄放入hProv

      {    

        // 錯誤處理

      }

      if(!CryptCreateHash(hProv,CALG—MD5,0,0,&hHash))

      // 創建一個散列對象,得到它的句柄放入hHash

      {

        // 錯誤處理

      }

      do

      {

       dReadLen=sourceFile-Read(pBuffer,BUFFER);

       if(!CryptHashData(hHash,pBuffer,dReadLen,0))

      // 根據文件的內容計算散列值

       {

        // 錯誤處理

       }

      }while(!(dReadLen
      if(!CryptSignHash(hHash,AT—SIGNATURE,NULL,0,pSignature,&dSignatureLen))

      //使用私人密鑰對散列值進行數字簽名

      //簽名數據放入pSignature,長度放入dSignatureLen

        // 錯誤處理

      }

      對基于文件的數據簽名進行檢驗。

      //變量聲明:

      HCRYPTPROV hProv;

      // CSP的句柄

      HCRYPTHASH hHash;

      // 散列的句柄

      HCRYPTKEY hPublicKey;    

      // 公共密鑰的句柄

      const int BUFFER=4096;  

      // 緩沖區大小常數

      BYTE pBuffer[BUFFER];    

      // 存放讀文件內容的緩沖區

      TFileStream *sourceFile; // 一個文件流

      BYTE pSignature[256];    

      // 上一段得到的簽名的緩沖區

      DWORD dSignatureLen;    

      // 上一段得到的簽名的長度

      if(!CryptAcquireContext(&hProv,NULL,NULL,PROV—RSA—FULL,0))

      // 連接默認的CSP,接受它的句柄放入hProv

      {

        // 錯誤處理

      }

      if(!CryptGetUserKey(hProv,AT_SIGNATURE,&hPublicKey); // 得到公共密鑰的句柄

      {

        // 錯誤處理

      }

      if(!CryptCreateHash(hProv,CALG—MD5,0,0,&hHash)) // 創建一個散列對象,得到它的句柄放入hHash

      {

        // 錯誤處理

      }

      do

      {

       dReadLen=sourceFile-Read(pBuffer,BUFFER);

       if(!CryptHashData(hHash,pBuffer,dReadLen,0))

      // 根據文件的內容計算散列值

       {

        // 錯誤處理

       }

      }while(!(dReadLen
      if(!CryptVerifySignature(hHash,pSignature,dSignatureLen,hPublicKey,NULL,0))

      {

        if(GetLastError()==NTE—BAD—SIGNATURE) ShowMessage(″文件已被修改″);

      }

      else

      {

       ShowMessage(″文件沒被修改″);

      }

      以上是一個數字簽名的簡單實現,得到的簽名數據可以單獨保存,也可以分開保存。

    [文章錄入員:nancy]

    相關文章
  • C++ Builder構建算二十四點小游戲
  • 用C++ Builder實現桌布自動更新
  • 用C++ Builder開發多層數據庫應用程序
  • C++ Builder中消息處理過程及應用
  • C++ Builder下數據庫報表Master/Detail關系功能的實現
  • 用C++ Builder實現網絡連接檢測程
  • 相關書籍:
  • C++ Builder 5.0經典入門
  • C++ Builder 3 核心編程技術
  • 本站推薦內容

    近期主機類熱搜關鍵詞:
    美國服務器 美國服務器租用 海外服務器租用 國外服務器租用

    C++Builder
    C/C++/VC
    C++Builder
    Basic/VB類
    Delphi/Pascal
    Java編程
    FORTRAN
    其它
    電腦教程閱讀排行
    ·模擬鍵盤按鍵 自動輸入文字
    ·在C++Builer中多線程的實...
    ·C++ Builder構建算二十...
    ·C++ Builder中消息處理...
    ·用C++ Builder實現桌布...
    ·用C++ Builder實現網絡...
    ·用C++ Builder開發多層...
    ·用C++Builder 建立數據...
    ·用BCB開發有身份認證功能的Em...
    ·個性凸現的動畫 特技效果
    福建22选5号码走势图