转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
用VB6.0实现数字签名         ★★★★

用VB6.0实现数字签名

作者:闵涛 文章来源:闵涛的学习笔记 点击数:849 更新时间:2009/4/23 15:02:22


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

  数据签名原理

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

  ----通常,产生消息摘要的快速加密算法被称为单向杂凑函数。一种单向杂凑函数不使用密钥,它只是一个简单的公式,把任何长度的一个消息转化为一个叫做消息摘要的简单的字符串。当使用一个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


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台