选择显示字体大小

用vb6.0实现数字签名



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

  数据签名原理

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

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


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons