1.问题描述
RSA密码系统可具体描述为:取两个大素数p和q,令n=pq,N=(p-1)(q-1),随机选择整数d,满足gcd(d,N)=1,ed=1 modN。
公开密钥:k1=(n,e)
私有密钥:k2=(p,q,d)
加密算法:对于待加密消息m,其对应的密文为c=E(m)=me(modn)
解密算法:D©=cd(modn)
2.基本要求
p,q,d,e参数选取合理,程序要求界面友好,自动化程度高。
4. 实现提示
要实现一个真实的RSA密码系统,主要考虑对大整数的处理。P和q是1024位的,n取2048位。
BigInteger.h
#ifndef BIGINT_H_INCLUDED
#define BIGINT_H_INCLUDED
#include
#include
#include
#include
main.cpp
#include"BigInteger.h"
#include
int main()
{
DWORD star_time = GetTickCount();
BigInt p("2305843009213693951"),q("415924872698612520126277439911"),N,n,a("1"),b("2");
//BigInt p("11"),q("17"),N,n,a("1"),b("2");
BigInt d,e;
BigInt m,s;
N=p*q;
s=gcd(p-a,q-a);
n=s*((p-a)/s)*((q-a)/s);
//cout<>e;
cout<<"gcd(e,n): "<>m;
BigInt t;
cout<<"加密:"<