void GensigDlg::OnGensig()
{
if(m_strPK.IsEmpty()){MessageBox(“请导入私钥”,NULL,MB_ICONERROR|MB_OK);return;}
if (m_strF.IsEmpty)
{MessageBox(“请选择要签名的文件”,NULL,MB_ICONERROR|MB_OK);return;}
int i;
SHA1_CTX context;
unsigned char digest[20],buffer[16384];
FILE*file;
if(!(file=fopen(LPCTSTR(m_strF),”rb”)))
{MessageBox(“无法打开文件”);return;}
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_Length=5;
CRsa enc;
Sig.Mov(enc.encrypt*(dig,n,pk));sig.Put(m_strS);
UpdateData(FALSE);
}
签名的流程如图3
图3 签名流程
签名的实现:
(1)房产证持有者在房产证处理模块中输入相关的证件信息,生成一个与之对应的房产证数字公文文件。
(2)将生成的数字公文文件用安全哈希算法进行消息摘要处理,得到房产证文件的消息摘要文件。
(3)对经过哈希算法产生的数字摘要文件用密钥生成模块产生的用户的私钥进行加密,也就是对摘要进行签名。因为用户私钥是房产证持有者自己保密的,所以能保证签名的真实性和唯一性。
3.3.3 签名验证模块
签名验证模块是对用户的数字证书的真伪性进行鉴别的。在对用户证书进行验证时,需要用户的签名后文件和数字证书的原文。用密钥管理模块生成的公钥来解密用户的签名文件,得到一个消息摘要,解密的方法为:收到签名文件 后,计算 进行解密,其中 为公开公钥;再用哈希算法对数字证书进行摘要处理得到一个消息摘要;通过对比这两个消息摘要是否一致来判定这个有用户数字签名的数字房产证书是不是鉴别人的。签名验证的过程通过一段代码来实现其功能:
Void CersigDlg::OnCers()
{
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;}
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)){i=fread(buffer,1,16384,file); SHA1Update(&context,buffer,i);}
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 cer;
if(dig.Cmp(cer.decrypt(sig,n,uk))==0)
{ MessageBox(“签名合法”,NULL,MB_ICONINFORMATION|MB_OK);}
else MessageBox(“签名不合法”,NULL,MB_ICONERROR|MB_OK);
}
签名验证流程如图4
图4 签名验证
签名验证过程:
(1)房产证持有者提供证件信息,在房产证处理模块中输入相关的证件信息,生成一个与之对应的房产证数字公文文件。
(2)将生成的数字公文文件用安全哈希算法进行消息摘要处理,得到房产证文件的消息摘要文件。
(3)将要验证的数字签名证书用密钥管理模块生成的公钥进行解密,得到一个消息摘要文件。
(4)将两次得到的消息摘要文件通过比较运算来判断两次消息摘要是否一致,若一致则说明证书为真,若不一致则证书为假。
总结
通过对这个房产证信息数字签名的分析设计,我学到了很多的知识。对密码技术,公钥密码体制和数字签名都有了新的认识。并且对数字签名的概念和RSA数字签名的实现都有了初步了解。但是理解不是很深,还需要不断地学习才能更加熟练地运用。通过介绍传统的证件在信息保密和防伪方面的弊端,来引出用新的信息安全技术与传统的证件防伪技术相结合这种方案,来保证证书的安全性和真实性。
- 上一篇:基于C#的校友信息管理系统开发+ER图+流程图
- 下一篇:VC++贪食蛇游戏的实现
-
-
-
-
-
-
-
酸性水汽提装置总汽提塔设计+CAD图纸
大众媒体对公共政策制定的影响
当代大学生慈善意识研究+文献综述
河岸冲刷和泥沙淤积的监测国内外研究现状
杂拟谷盗体内共生菌沃尔...
java+mysql车辆管理系统的设计+源代码
中考体育项目与体育教学合理结合的研究
乳业同业并购式全产业链...
电站锅炉暖风器设计任务书
十二层带中心支撑钢结构...