⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bcjq028.txt

📁 c++ builder 的一些txt文档
💻 TXT
字号:

C++ Builder开发者:程序员之家
var how_many_ads = 3;
var now = new Date()
var sec = now.getSeconds()
var ad = sec % how_many_ads;
ad +=1;
 
  
  
    
      
        
          
            首页   
              | 控件天堂 | 控件使用                   
              | 编程技巧                    
              |  源代码 |  编程工具 |        
               系统补丁 |  电子书籍 | 技术论坛                    
              |  相关链接                 
                           
                         
                       
                     
                     
                       
                         
                           
                             
                           
                 
       if (ad==1) {document.write(''+'');}               
       if (ad==2) {document.write(''+'');}               
       if (ad==3) {document.write(''+'');}               
                              
                           
                        
                                    
                        
                      
                    
                  
                  
                    
                      
                        
                          
                       
                     
var marqueecontents=''+scroll_text+''           
if (document.all)           
document.write(''+marqueecontents+'')           
function regenerate(){           
window.location.reload()           
}           
function regenerate2(){           
if (document.layers){           
setTimeout("window.onresize=regenerate",450)           
intializemarquee()           
}           
}           
function intializemarquee(){           
document.cmarquee01.document.cmarquee02.document.write(marqueecontents)           
document.cmarquee01.document.cmarquee02.document.close()           
thelength=document.cmarquee01.document.cmarquee02.document.height           
scrollit()           
}           
function scrollit(){           
if (document.cmarquee01.document.cmarquee02.top>=thelength*(-1)){           
document.cmarquee01.document.cmarquee02.top-=speed           
setTimeout("scrollit()",100)           
}           
else{           
document.cmarquee01.document.cmarquee02.top=marqueeheight           
scrollit()           
}           
}           
window.onload=regenerate2           
                       
                         
                       
                     
                   
                 
                 
                   
                     
                       
                         
                           
                             
                               
                  当前位置
    
    
                    编程技巧            
                            
                          
                        
                        
                        
                          
                            
                              
                    用C++Builder创建数字签名        
                          
                    
                      
                        
                          
                          如果你在网络上传递一份数据,但却存在着种种不安全的因素,使你对数据能否原封不动地到达目的地而心存疑惑,这时,你就可以给数据加上数字签名,从而使对方可以通过验证签名来检查你所传过去的数据是否已被他人修改。
            
                              一、程序原理
            
                              数字签名的工作原理还是比较简单的,它是根据你所提供的原始数据,经过复杂的算法,产生特定的数据签名,对方通过同样的过程也产生签名,如果数据已被修改,那么就不可能得到两份一模一样的签名,从而就可判断数据已被他人修改。编程人员利用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<BUFFER));
                              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<BUFFER));
                              if(!CryptVerifySignature(hHash,pSignature,dSignatureLen,hPublicKey,NULL,0))
                              {
                                if(GetLastError()==NTE—BAD—SIGNATURE)   
            ShowMessage(″文件已被修改″);
  
                              }
                              else
                              {
                               ShowMessage(″文件没被修改″);
  
                              }
                              以上是一个数字签名的简单实现,得到的签名数据可以单独保存,也可以分开保存。    
                            
                          
                              
                      
                            
                              
                            
                  if (ad==1) {document.write(''+'');}            
                  if (ad==2) {document.write(''+'');}            
                  if (ad==3) {document.write(''+'');}            
                                              
                            
                          
                        
                      
                 
                  
                    
                      
                    
                    
                        
                    
                  
                     
                   
                 
               
             
             
               
                 
                   
                     
            C++ Builder开发者®           
              2000年06月01日 站长:唐朝           
                     
                   
                 
               
               
                 
               
             
             
           
           
           
           

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -