• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
用C++
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
用C++ Builder创建数字签名
软件发布 用C++ Builder创建数字签名
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 文章首页 >> 编程技术 >> BCB教程 >> 用C++ Builder创建数字签名

用C++ Builder创建数字签名

添加时间: 2007-7-9 4:15:12  作者: BCB教程  阅读次数:61   来源: http://www.d9soft.com

       

  如果你在网络上传递一份数据,但却存在着种种不安全的因素,使你对数据能否原封不动地到达目的地而心存疑惑,这时,你就可以给数据加上数字签名,从而使对方可以通过验证签名来检查你所传过去的数据是否已被他人修改。

  一、程序原理

  数字签名的工作原理还是比较简单的,它是根据你所提供的原始数据,经过复杂的算法,产生特定的数据签名,对方通过同样的过程也产生签名,如果数据已被修改,那么就不可能得到两份一模一样的签名,从而就可判断数据已被他人修改。编程人员利用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(″文件没被修改″);

  }
 

  以上是一个数字签名的简单实现,得到的签名数据可以单独保存,也可以分开保存。

 

上下文章:

 

上一篇文章: C++ Builder中消息处理过程及应用 下一篇文章: 计算机短信DIY

相关文章:

  • 创建企业级Internet邮件服务器(一)
  • 创建企业级Internet邮件服务器(二)
  • 创建企业级Internet邮件服务器(三)
  • 创建企业级Internet邮件服务器(四)
  • 创建企业级Internet邮件服务器(五)

相关软件:

  • AGIsBuilder V1.0 汉化版
  • A4 Flash Menu Builder V2.29
  • All AHM Triton Tools 2002 Borland C++Builder V6.0
  • Site Builder V1.2.1
  • Website Builder V1.3
  • CuteSITE Builder V4.0.0.108

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • 如何在C++ Builder环境中实现在菜...
  • Windows下DLL编程技术及应用
  • 在BCB中使用DirectX
  • 用C++Builder开发动画DLL
  • 用C++Builder建立多线程COM服务器
  • C++Builder定制系统菜单
  • ODBC中的同步与异步执行模式
  • C++ Builder下数据库报表Master/D...
  • BCB环境下CORBA实做之客户端
  • 在C++Builer中多线程的实现

BCB教程阅读排行

  • C++ Builder 初学问与答(一)
  • 在 C++ Builder中利用串行通信控件...
  • C++ Builder 初学问与答(二)
  • 漫谈C++ Builder多线程编程技术
  • C++ Builder 初学问与答(十六)
  • C++ Builder 初学问与答(八)
  • 在C++ Builder中用Ole控制Excel表
  • C++ Builder 初学问与答(六)
  • C++ Builder 初学问与答(四)
  • C++ Builder 初学问与答(七)

编程技术阅读总排行

  • VB入门教程之一
  • Java连接数据库实例
  • 第二章 PowerBuilder 入门之创建新...
  • VC++之List Box/Check List Box控...
  • 第一章 什么是PowerBuilder
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有