手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Asp.Net编程>列表

用VB6.0实现数字签名

来源:互联网 作者:西部数码 时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!


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

  数据签名原理

  ----使用公共密钥加密算法对信息进行加密是非常耗时的,因此加密人员想出了一种办法来快速地生成一个代表你的消息的简短的、独特的消息摘要,这个摘要可以被加密并作为你的数字签名。

  ----通常,产生消息摘要的快速加密算法被称为单向杂凑函数。一种单向杂凑函数不使用密钥,它只是一个简单的公式,把任何长度的一个消息转化为一个叫做消息摘要的简单的字符串。当使用一个16位的杂凑函数时,杂凑函数处理的文本将产生一个16位的输出。例如,一个消息可能产生一个像 CBBV235ndsAG3D67 的字符串。每一个消息产生一个随机的消息摘要,用你的私有密钥对摘要进行加密就生成了一个数字签名。

  ----举一个例子:

  ----假设发送者A对他的消息计算一个消息摘要,然后用他的私有密钥对消息摘要进行加密,并把数字签名和原文一起发送给B。

  ----当B使用A的公开密钥解密数字签名,他就得到了A计算的消息摘要的一个备份。因为他能够用A的公开密钥对数字签名进行解密,他知道是A 产生的,这样就验证了发送者的身份。B然后使用相同的杂凑函数(在先前就协商好的)来计算A发送来的明文的消息摘要。如果他计算出来的摘要和A发送给他的摘要是相同的,这样他就可以确认数字签名是正确的,这不仅意味着是A发送的消息,而且消息在发送的过程中没有发生改变。一个相同的消息摘要意味着消息没有被改变,这种方法的一个问题是消息本身是作为明文的形式发送的,因此没有达到保密的要求。但编程人员可以采用一种使用秘密密钥的对称加密算法来加密消息的明文部分。

  ----编程人员利用Windows的CAPI接口,就可以实现数据的加密、解密和数字签名。

  ----数据签名的流程如下图所示:

  程序原理

  ----数据签名主要使用以下两个函数:

  #include
  BOOL WINAPI CryptSignHash(
  HCRYPTHASH hHash, // in
  DWORD dwKeySpec, // in
  LPCTSTR sDescription,//in
  DWORD dwFlags, // in
  BYTE *pbSignature, // out
  DWORD *pdwSigLen // in/out
  );
  
  #include
  BOOL WINAPI CryptVerifySignature(
  BYTE *pbSignature, // in
  DWORD dwSigLen, // in
  HCRYPTKEY hPubKey, // in
  LPCTSTR sDescription, // in
  DWORD dwFlags // in
  );
  ----由于这两个函数是C语言的定义,其中的pbSignature变量是用户数据(二进制类型)的缓冲区的指针,而在VB中是没有指针这个定义的,因此,笔者通过利用VB的BYTE数组实现了C语言的指针。

  ----以上两个函数在VB中的定义如下:

Private Declare Function CryptSignHashA Lib “advapi32.dll" (ByVal hHash As Long, _
ByVal dwKeySpec As Long, ByVal sDescription As String, ByVal dwFlags As Long, _
  ByRef pbSignature As Byte, pdwSigLen As Long) As Long

Private Declare Function CryptVerifySignatureA Lib “advapi32.dll" (ByVal hHash As Long, _
ByRef pbSignature As Byte, ByVal dwSigLen As Long, ByVal hPubKey As Long, _
  ByVal sDescription As String, ByVal dwFlags As Long) As Long

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS