用C Builder创建数字签名
2008-02-23 05:30:55来源:互联网 阅读 ()
一、程式原理
数字签名的工作原理还是比较简单的,他是根据您所提供的原始数据,经过复杂的算法,产生特定的数据签名,对方通过同样的过程也产生签名,假如数据已被修改,那么就不可能得到两份一模相同的签名,从而就可判断数据已被他人修改。编程人员利用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(″文档没被修改″);
}
以上是个数字签名的简单实现,得到的签名数据能够单独保存,也能够分开保存。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 用BCB研发多层数据库应用程式
下一篇: 用C Builder操纵Excel
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash