144_房产证信息数字签名
以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
资料介绍:
房产证公文数字签名系统总体设计
3.1系统功能图
房产证公文数字签名系统总共分为两大功能模块:房产证公文处理模块和信息安全处理模块,而信息安全处理模块主要由密钥管理模块,数字签名生成模块和签名验证模块构成,(如图4所示)
图 4 系统功能图
下面分别介绍各个模块的功能
3.2 房产证公文处理模块
在不同的房产证中相应的证件的输入信息不相同,公文处理模块采用证件输入界面,将信息存储为一种统一的数据格式公文文件就可以进行相同的安全处理,在验证时在将统一格式的数据公文进行信息还原就可以实现。因此系统可以方便的进行信息输入,其证件信息输入界面如图5所示。
图5 房产证信息输入界面
在公文处理模块中,监管中心需要把用户房屋产权者的相关内容输入这个数字文件中;
例如 :
证书持有人姓名; 张XXX
房屋产证编号; 0000354 【www.think58.com计算机毕业论文网】
房屋的类型; 商品房
房屋使用年限; 50年
房屋所在地址; XXX路XX街XXXX号
开发商名称; XXX房地产开发公司
物管单位; XXX物业管理公司
户主联系电话 02883961853
私密问题; XXXXXX
think58好,好think58 [来源:http://think58.com]
问题答案; XXXXXXX
当用户把这些都输入到相应的对话框中通过保存按钮就可以把这个证件保存在一个相应的文件中。这个只是房产证件原件对应的数字公文文件。
为了真正能对户主的利益安全考虑,在本设计中还加入了一个户主的秘密问题,以及秘密问题的答案这两项。通过这两项再结合数字签名就更能更好的辨别这个证件的真伪了,假如户主提问; 我高中最喜欢的一个老师是某某某?
户主自己回答的答案是ABC,如果遇到有人想假冒户主并私自使用户主的房产证的时候,在鉴别房产证的真伪的时候。他如果在秘密问题这个选项提问和原来的不一样或者回答的答案不一样在经过相同的方法处理后就和户主本身持都的房产证公文文件有很大的差别,由此断定这个数字证书是假冒的。
对输入信息的保存实现代码
void GenfczDlg::OnSave()
{
UpdateData();
CFileDialog save_uk_dlg(FALSE,"uk",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"Public fcz files (*.txt)|*.txt");
if(save_uk_dlg.DoModal()==IDOK){
CString file_path=save_uk_dlg.GetPathName();
CFile fuk(file_path,CFile::modeCreate|CFile::modeWrite); [版权所有:http://think58.com]
think58好,好think58
[资料来源:www.THINK58.com]
char endline[1]={';'};
fuk.Write((LPCTSTR)m_name,m_num.GetLength());
fuk.Write(endline,1);
fuk.Write((LPCTSTR)m_num,m_num.GetLength());
fuk.Write(endline,1);
fuk.Write((LPCTSTR)m_addr,m_addr.GetLength());
fuk.Write(endline,1);
fuk.Write((LPCTSTR)m_type,m_type.GetLength());
fuk.Write(endline,1);
fuk.Write((LPCTSTR)m_year,m_year.GetLength());
fuk.Write(endline,1);
fuk.Write((LPCTSTR)m_phone,m_phone.GetLength());
fuk.Write(endline,1);
fuk.Write((LPCTSTR)m_phone,m_simi.GetLength());
fuk.Write(endline,1);
fuk.Write((LPCTSTR)m_phone,m_daan.GetLength());
fuk.Write(endline,1);
fuk.Close();
}
UpdateData(FALSE);
}
3.3 信息安全处理模块
3.3.1 RSA 密钥管理模块
在这个密钥生成模块中,该模块通过程序中的相关加密算法来随机生成发放给用户的私钥和房产管理中心留存和私钥成对的公钥文件,管理中心可以通过这个模块的生成密钥按钮,让计算机自动生存公钥和私钥,生成相应的密钥以后 公钥由管理中心统一管理,私钥文件会发放给相应的户主。以便户主在下一个模块中通过自己的私钥来对自己的数字房产证进行相应的签名,达到不可抵赖的作用通过对房密钥生成模块的测试,通过该子系统中RSA加密算法能够得出签名需要用到的签名私钥和管理中心用来验证签名后的证件的真伪的公钥。
think58.com
[版权所有:http://think58.com]
图6 密钥管理模块图
RSA密码系统的安全性依赖于大数分解的难度,一般建议用户选择的素数p和q至少为100位,则n=pq是至少为200位的十进制数。因此实现RSA算法有必要定义大数的数据结构如图6所示。
密钥生成,加密和解密涉及到一些大数的基本运算。定义大数的基本运算库,包括加、减、乘、除、取模运算等,其中最重要的模乘运算和模幂运算。
模幂算法是加密解密的核心算法。计算模幂的一种有效算法是“平方-乘”方法,通过对指数的二进制化来实现。大数数据的加,减,乘,除,模,模幂等由CBigInt这个类来完成,其定义如下:
1.CBigInt类的定义
class CBigInt
{
public: //大数在0x100000000进制下的长度
unsigned m_nLength; //用数组记录大数在0x100000000进制下每一位的值
unsigned long m_ulValue[BI_MAXLEN];
CBigInt();
~CBigInt();
/*****************************************************************
基本操作与运算
Mov,赋值运算,可赋值为大数或普通整数,可重载为运算符“=”
Cmp,比较运算,可重载为运算符“==”、“!=”、“>=”、“<=”等
think58
[资料来源:http://think58.com]
Add,加,求大数与大数或大数与普通整数的和,可重载为运算符“+”
Sub,减,求大数与大数或大数与普通整数的差,可重载为运算符“-”
Mul,乘,求大数与大数或大数与普通整数的积,可重载为运算符“*”
Div,除,求大数与大数或大数与普通整数的商,可重载为运算符“/”
Mod,模,求大数与大数或大数与普通整数的模,可重载为运算符“%”
*****************************************************************/
void Mov(unsigned __int64 A);
void Mov(CBigInt& A);
CBigInt Add(CBigInt& A);
CBigInt Sub(CBigInt& A);
CBigInt Mul(CBigInt& A);
CBigInt Div(CBigInt& A);
CBigInt Mod(CBigInt& A);
CBigInt Add(unsigned long A);
CBigInt Sub(unsigned long A);
CBigInt Mul(unsigned long A);
CBigInt Div(unsigned long A);
unsigned long Mod(unsigned long A);
int Cmp(CBigInt& A);
/*****************************************************************
输入输出
Get,从字符串按10进制或16进制格式输入到大数 think58好,好think58 [资料来源:www.THINK58.com]
Put,将大数按10进制或16进制格式输出到字符串
*****************************************************************/
void Get(CString& str, unsigned int system=HEX);
void Put(CString& str, unsigned int system=HEX);
int Rab();//米勒-罗宾算法
CBigInt Euc(CBigInt& A); //欧几里德算法求解同余方程
CBigInt RsaTrans(CBigInt& A, CBigInt& B); //反复平方算法进行幂模运算
void GetPrime(int bits); //产生指定长度的随机大素数
CBigInt Gcd(CBigInt& A);
};
think58 [资料来源:http://think58.com]
上一篇:vc++可视化图像处理系统+论文