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

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

2013-06-29 01:28
导读:德算法求解同余方程 CBigInt RsaTrans(CBigInt A, CBigInt B); //反复平方算法进行幂模运算 void GetPrime(int bits); //产生指定长度的随机大素数 CBigInt Gcd(CBigInt A); }; 2.
德算法求解同余方程
    CBigInt RsaTrans(CBigInt& A, CBigInt& B); //反复平方算法进行幂模运算
    void GetPrime(int bits); //产生指定长度的随机大素数
 CBigInt Gcd(CBigInt& A);
};
 2. RSA相关算法实现
 RSA算法实现比较重要的是素性检测,大随机数的产生,求逆运算等,分别由下面几个函数来完成,下面给出拉宾米勒算法。
 int CBigInt::Rab()
{
    unsigned i,j,pass;
    for(i=0;i<550;i++){if(Mod(PrimeTable[i])==0)return 0;}
    CBigInt S,A,I,K;
    K.Mov(*this);
 K.m_ulValue[0]--;
    for(i=0;i<5;i++)
    {
        pass=0;
        A.Mov(rand()*rand());
  S.Mov(K);
        while((S.m_ulValue[0]&1)==0)
  {
            for(j=0;j<S.m_nLength;j++)
   {
       S.m_ulValue[j]=S.m_ulValue[j]>>1;
       if(S.m_ulValue[j+1]&1)S.m_ulValue[j]=S.m_ulValue[j]|0x80000000;
   }
      if(S.m_ulValue[S.m_nLength-1]==0)S.m_nLength--;
   I.Mov(A.RsaTrans(S,*this));
   if(I.Cmp(K)==0){pass=1;break;}
  }
  if((I.m_nLength==1)&&(I.m_ulValue[0]==1))pass=1;
  if(pass==0)return 0;
 }
    return 1;
}
3.3.2 签名生成模块
 在签名产生模块中,户主通过管理中心发放给他的私钥,以及他刚刚通过数字证书生成模块得到的房产证文件,然后将这两个文件分别导入模块中,通过生成签名按钮及可以得到生成后的数字签名。这个签名由户主自己保存。密钥生成过程时间主要是生成随机素数的时间及计算公钥和私钥的模乘法的时间。如图7所示
(转载自http://www.NSEAC.com中国科教评价网)

            
  图7  签名生成模块图
 在数字签名过程中要对文件进行签名首先得用对要签名的文件进行数字摘要处理。在常见的生成数字摘要的方法有MD5和SHA-1,在本设计中对文件的消息摘要我们是通过SHA-1安全哈希算法来实现的。下面简要的介绍安全哈希算法的具体实现方法和代码:
  SHA-1安全哈希算法的实现
typedef struct {             /*SHA结构体定义*/
    unsigned long state[5];
    unsigned long count[2];
    unsigned char buffer[64];
} SHA1_CTX;
 void SHA1Transform(unsigned long state[5], unsigned char buffer[64]);/*传输函数,用于数据的转换和传、送*/
 void SHA1Init(SHA1_CTX* context);   /*初始化,对初始条件进行定义和说明*/
 void SHA1Update(SHA1_CTX* context, unsigned char* data, unsigned int len);   /*  中间转换函数 */
 void SHA1Final(unsigned char digest[20], SHA1_CTX* context);     /* 得到最后的哈希表*/
#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
/* blk0() and blk() perform the initial expand. */
/* I got the idea of expanding during the round function from SSLeay */
 #ifdef LITTLE_ENDIAN
 #define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \
    |(rol(block->l[i],8)&0x00FF00FF))
 #else
 #define blk0(i) block->l[i]
 #endif
 #define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \
    ^block->l[(i+2)&
上一篇:免费H考试题库管理系统的设计与实现(一) 下一篇:免费vc++网上寻呼QICQ源代码(附带论文)(一)