VC实现Word/Excel文件数字签名

Author:zfive5(zhaozidong)

Email :zfive5@yahoo.com.cn

 

/*

前些天工作很忙和累,加上bug,无心也不允许我上论坛,前些看到一个网友给我发的短消息,说是要实现密钥写到word里,同时不能破坏word!早些时候就知道word是结构化文档,所以我的思路就是用结构化文档接口生成一个结点,然后写上所谓的密钥!说白了只要会使用结构化文档com组件就ok了!

不说废话了,开编:)

*/

 

#include "stdafx.h"

#include "objidl.h"

#include "comdef.h"

long WriteDoc(char *szFileName,char *szName,char *szValue)

{

     IStorage *pStore=NULL;

     IStream  *pStream=NULL;

 

     HRESULT hr=E_FAIL;

     hr=::StgOpenStorage(_bstr_t(szFileName),NULL,STGM_READWRITE|STGM_DIRECT|STGM_SHARE_EXCLUSIVE,NULL,0,&pStore);

     if(hr!=S_OK&&pStore==NULL)

     {

         return -1;

     }

 

     hr=pStore->CreateStream(_bstr_t(szName),STGM_READWRITE|STGM_CREATE|STGM_DIRECT|STGM_SHARE_EXCLUSIVE,0,0,&pStream);

     if(hr!=S_OK)

     {

         pStore->Release();

         return -1;

     }

 

    ULONG uSize;

     hr=pStream->Write((void *)szValue,strlen(szValue)+1,&uSize);

     if(hr!=S_OK)

     {

         pStream->Release();

         pStore->Release();

         return -1;

     }

 

     pStream->Release();

     pStore->Release();

     return 0;

}

 

long ReadDoc(char *szFileName,char *szName,char *szValue,int nSize)

{

     IStorage *pStore=NULL;

     IStream  *pStream=NULL;

 

     HRESULT hr=E_FAIL;

     hr=::StgOpenStorage(_bstr_t(szFileName),NULL,STGM_READ|STGM_DIRECT|STGM_SHARE_EXCLUSIVE,NULL,0,&pStore);

     if(hr!=S_OK&&pStore==NULL)

     {

         return -1;

     }

 

     hr=pStore->OpenStream(_bstr_t(szName),NULL,STGM_READ|STGM_DIRECT|STGM_SHARE_EXCLUSIVE,0,&pStream);

     if(hr!=S_OK)

     {

         pStore->Release();

         return -1;

     }

 

     ULONG uSize;

     hr=pStream->Read(szValue,nSize,&uSize);

     if(hr!=S_OK)

     {

         pStream->Release();

         pStore->Release();

          return -1;

     }

 

     pStream->Release();

     pStore->Release();

     return 0;

}

 

int _tmain(int argc, _TCHAR* argv[])

{

     ::CoInitialize(NULL);

     {

         char szBuf[100+2];

 

         WriteDoc("c://zfive5.doc","zfive5-6","hello");

         memset(szBuf,100,sizeof(szBuf));

         ReadDoc("c://zfive5.doc","zfive5-6",szBuf,sizeof(szBuf)-2);

         printf(szBuf);

     }

     ::CoUninitialize();

     return 0;

}

 

/*

 *  

 用这种思路,再结合文档数据结合起来就可以实现数字签名,至于用md5还是sha就随便了!

 */

 

1:

zfive5word 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值