3房产证信息数字签名的实现分析
3.1 实现功能图
房产证信息数字签名的实现总共可分为两大功能模块:房产证信息处理模块、信息安全处理模块,而信息安全处理模块又分为密钥管理模块,数字签名生成模块和签名验证模块。房产证信息处理模块主要用来对房产证的信息进行处理,RSA模块主要用来生成密钥对,签名生成模块和签名验证模块则主要用来对房产证信息文件进行数字签名和验证证件真伪,模块功能图如图1所示:
图1 功能图
3.2 房产证处理模块
在房产证处理模块中用证件信息输入界面,把房产证信息存储为一种统一的数据格式文件,就可以进行相同的安全处理,验证时将格式统一的数据文件进行信息还原就可以实现。在输入时,需要将如下内容输入:证件编号、证件持有人姓名、房屋类型、房屋地址、管理单位、持证人电话等。当用户把这些内容输入到相应的对话框中并保存,就可以把房产证原件对应的数字公文文件保存在一个相应的文件中。
3.3 信息安全处理模块
3.3.1 RSA密钥管理模块
在密钥生成模块中,该模块通过RSA加密算法来随机生成公钥和私钥,私钥发放给相应的户主保管,而公钥由房产管理中心保管。户主的私钥用来在下一个模块中对自己的数字房产证进行数字签名,使它具有唯一性[9]。生成密钥的方法为:(1)生成两个任意质数 和 。求 , ,其中 , 和 保密, 作为公钥公开。(2)任选一个数 使得 与 互质, 作为加密密钥。求数 满足 。把 作为用户私钥保密, 作为公钥公开。RSA加密算法的安全性依赖于大数分解的难度,建议用户选择的素数p和q至少应为100位,则n=pq是至少为200位的十进制数。密钥生成,加密解密涉及到大数的一些基本运算,包括加、减、乘、除、取模、模幂运算等。大数数据的加、减、乘、除、模、模幂等由CbigInt这个类来完成,其定义如下:
class CBigInt
{ //大数在0x100000000进制下的长度
public: unsignde m_nLength; //用数组记录大数在0x100000000进制下每一位的值
Unsigned long m_ulValue[BI_MAXLEN];
CBigInt();
~ CBigInt();
/* Mov,赋值运算; Cmp,比较运算;Add,加;Sub,减;Mul,乘;Div,除;Mod,模 */
Void Mov(unsigned_int64 A);
Void Mov(CBigInt& A);
CBigInt Add(CBigInt& A);
CBigInt Sub(CBigInt& A);
CBigIntMul(CBigInt& A);
CBigInt Div(CBigInt& A);
CBigInt Mod(CBigInt& A);
CBigIntAdd(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进制格式输入到大数
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);
}
密钥生成实现流程如图2
图2 密钥生成图
3.3.2 签名生成模块
在该模块中,用户需要在上一个模块中得到的私钥和通过数字证书生成模块得到的房产证文件,把私钥和文件分别导入到该模块中,通过私钥对要签名的文件进行加密便可得到数字签名后的文件,用户把签名文件自己保存起来。在对文件进行签名前需要对要签名的文件进行数字摘要处理,才可用私钥进行加密。在此使用SHA1哈希算法来实现数字摘要处理的,在用SHA1哈希算法得到消息摘要文件后,用用户所持有的私钥就可以对原文件进行签名运算生成签名了。在生成签名的时候将用到生成签名的算法,将消息摘要文件设为 ,计算 ,其中 是公钥, 是用户私钥。具体实现如下: 房产证信息数字签名的实现+RSA公钥+SHA哈希算法(3):http://www.youerw.com/jisuanji/lunwen_1658.html