计算机应用 | 古代文学 | 市场营销 | 生命科学 | 交通物流 | 财务管理 | 历史学 | 毕业 | 哲学 | 政治 | 财税 | 经济 | 金融 | 审计 | 法学 | 护理学 | 国际经济与贸易
计算机软件 | 新闻传播 | 电子商务 | 土木工程 | 临床医学 | 旅游管理 | 建筑学 | 文学 | 化学 | 数学 | 物理 | 地理 | 理工 | 生命 | 文化 | 企业管理 | 电子信息工程
计算机网络 | 语言文学 | 信息安全 | 工程力学 | 工商管理 | 经济管理 | 计算机 | 机电 | 材料 | 医学 | 药学 | 会计 | 硕士 | 法律 | MBA
现当代文学 | 英美文学 | 通讯工程 | 网络工程 | 行政管理 | 公共管理 | 自动化 | 艺术 | 音乐 | 舞蹈 | 美术 | 本科 | 教育 | 英语 |

免费房产证信息数字签名的实现(一)毕业(7)

2013-06-29 01:28
导读:amp;15]^block-l[i15],1)) /* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */ #define R0(v,w,x,y,z,i) z+=((w(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);/*对常用公式进行宏定
amp;15]^block->l[i&15],1))

/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */
#define R0(v,w,x,y,z,i)
z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);/*对常用公式进行宏定义 ,以精简程序*/
#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30);
#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30);
#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30);
#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30);
 在对文件进行安全哈希后得到了一个消息摘要文件,对文件的签名除了需要消息摘要文件以外还需要用户持有的私钥文件,有了这两个必须的,就可以对原文件进行签名运算了,在生成签名的时候我们将会用到生成签名算法。生成签名算法的具体实现代码如下:
 void GensigDlg::OnGensig()
{
 // TODO: Add your control notification handler code here
 if(m_strPK.IsEmpty()){
  MessageBox("请导入私钥",NULL,MB_ICONERROR|MB_OK);
  return;
 }
 if(m_strF.IsEmpty()){
  MessageBox("请选择要签名的文件",NULL,MB_ICONERROR|MB_OK);
  return;
 }
 //----sha------------//
 int i;
 SHA1_CTX context;
 unsigned char digest[20], buffer[16384];
 FILE* file;
 if(!(file=fopen(LPCTSTR(m_strF),"rb"))){
  MessageBox("无法打开文件!");
  return;
 }
 SHA1Init(&context);
    while (!feof(file)) {  // note: what if ferror(file)
        i = fread(buffer, 1, 16384, file);
        SHA1Update(&context, buffer, i);
    } (科教范文网 Lw.nsEAc.com编辑整理)
    SHA1Final(digest, &context);
 fclose(file);
 //--------------------//
 dig.Mov(0);
 for(int j=0;j<5;j++){
  memcpy(&dig.m_ulValue[j],&digest[j*4],4);
 }
 dig.m_nLength=5;
 CRsa enc;
 sig.Mov(enc.encrypt(dig,n,pk));
 sig.Put(m_strS);
 UpdateData(FALSE);
}
3.3.3 签名验证模块
 此模块主要是用于鉴别用户的数字证书的真伪性的。在这个模块用户只需要把自己的私钥文件和前一个模块地到的签名文件与用户填写的房产证公文文件共同导入这个模块通过计算机的运算对比就可以得出真假的鉴别结果。在此过程中必须要保证用户的私有信息要完全准确无误,还需要这个用户有自己的私钥文件和相应的数字签名文件,在这三个条件都能满足验证系统的要求的情况下得出的真伪鉴别结论可信度是值得肯定的,具体实现如图8所示。
    
 
 图8   签名与验证模块图
 在对证书文件进行签名以后,如果用户需要知道自己的证书是不是真的,他就需要通过管理中心来对自己的证书进行鉴别和验证。
 验证签名过程的实行通过以下一段VC++代码来实现其验证功能
void CersigDlg::OnCers()
{
 // TODO: Add your control notification handler code here
 if(m_strUK.IsEmpty()){
  MessageBox("请导入公钥",NULL,MB_ICONERROR|MB_OK);
  return;
 }
 if(m_strF.IsEmpty()){
  MessageBox("请选择签名文件",NULL,MB_ICONERROR|MB_OK);
  return;
 }
 if(m_strS.IsEmpty()){
  MessageBox("请导入签名",NULL,MB_ICONERROR|MB_OK);
  return;
 }
 //----sha------------//

(科教范文网 Lw.nsEAc.com编辑整理)

 int i;
 SHA1_CTX context;
 unsigned char digest[20], buffer[16384];
 FILE* file;
 if(!(file=fopen(LPCTSTR(m_strF),"rb"))){
  MessageBox("无法打开文件!");
  return;
 }
 SHA1Init(&context);
    while (!feof(file)) {  // no
上一篇:免费H考试题库管理系统的设计与实现(一) 下一篇:免费vc++网上寻呼QICQ源代码(附带论文)(一)