RSA加解密的设计与实现程序+报告

上传人:hs****ma 文档编号:563860139 上传时间:2023-09-04 格式:DOCX 页数:18 大小:140.14KB
返回 下载 相关 举报
RSA加解密的设计与实现程序+报告_第1页
第1页 / 共18页
RSA加解密的设计与实现程序+报告_第2页
第2页 / 共18页
RSA加解密的设计与实现程序+报告_第3页
第3页 / 共18页
RSA加解密的设计与实现程序+报告_第4页
第4页 / 共18页
RSA加解密的设计与实现程序+报告_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《RSA加解密的设计与实现程序+报告》由会员分享,可在线阅读,更多相关《RSA加解密的设计与实现程序+报告(18页珍藏版)》请在金锄头文库上搜索。

1、上海电力学院应用密码学课程设计题目:RSA加解密的设计与实现院系:计算机与信息工程学院专业年级:信息安全专业2009252班学生姓名:学号:20093464指导教师:温蜜2011年1月6日目录一、设计要求3二、开发环境与工具3三、设计原理3四、系统功能描述与软件模块划分4五、设计核心代码6六、设计结果及验证16七、软件使用说明17八、参考资料18九、设计体会18、设计要求1、随机搜索大素数,随机生成公钥和私钥;2、用公钥对任意长度的明文加密;3、用私钥对密文解密;4、界面简洁、交互操作性强。5、(可选)实现对汉字的加解密,把加密结果存放在文本文档二、开发环境与工具开发环境:win764位操作系

2、统开发工具:VC+6.0三、设计原理(算法工作原理)首先设计一个能存放足够大数的类CBigInt,这个类是把很大的数分解成一个个int类型的数来i存储的。输入你要求的密钥位数,然后用rand()函数生成一个个32位数,拼接成大数,进行素性检测,是素数就返回,就这样就产生了公钥(e,n)和私钥(d,n),然后利用公式c=mAemodn,得到密文,保存得到的密文到文本文档,再用公式m=cAdmodn,得到明文。算法路程图如下:输入需要生成的密钥长度产生随机大数四、系统功能描述与软件模块划分CBigInt类的功能:classCBigIntpublic:unsignedm_nLength;unsign

3、edlongm_ulVaiueBI_MAXLEN;CBigInt();CBigInt();voidMov(unsigned_int64A);voidMov(CBigInt&A);CBigIntAdd(CBigInt&A);/加法CBigIntSub(CBigInt&A);减法CBigIntMul(CBigInt&A);乘法CBigIntDiv(CBigInt&A);除法CBigIntMod(CBigInt&A);模CBigIntAdd(unsignedlongA);CBigIntSub(unsignedlongA);CBigIntMul(unsignedlongA);CBigIntDiv(un

4、signedlongA);voidFromString(char*,intlen);intToString(char*);unsignedlongMod(unsignedlongA);intCmp(CBigInt&A);CBigIntModExp(CBigInt&A,CBigInt&B);CBigIntRsaTrans(CBigInt&A,CBigInt&B);intRabinMiller();CBigIntEuc(CBigInt&A);voidGetPrime(unsignedbits);voidPut(char*str,unsignedintsystem);voidGet(char*str

5、,unsignedintsystem);friendCBigIntoperator+(CBigInt&a,CBigInt&b);friendCBigIntoperator-(CBigInt&a,CBigInt&b);friendCBigIntoperator*(CBigInt&a,CBigInt&b);friendCBigIntoperator/(CBigInt&a,CBigInt&b);friendCBigIntoperator%(CBigInt&a,CBigInt&b);CBigIntoperator+(unsignedlongb);CBigIntoperator-(unsignedlon

6、gb);CBigIntoperator*(unsignedlongb);CBigIntoperator/(unsignedlongb);;voidMov(CBigInt&A);voidMov(unsignedint64A)是实现大数复制的功能用法为a.Mov(b),就是把大数b赋给aCBigIntAdd(CBigInt&A)实现大数加法功能,用法为a.Add(b),等介于a+b;CBigIntSub(CBigInt&A)实现大数减法功能,用法为a.Sub(b),等价于a-b;CBigIntMul(CBigInt&A)实现大数乘法功能,用法为a.Mul(b),等价于a*b;CBigIntDiv(

7、CBigInt&A)实现大数除法功能,用法为a.Div(b),等价于a/b;CBigIntMod(CBigInt&A)实现大数的模功能,用法为a.Mod(b)等价于a%b;voidFromString(char*,intlen)实现字符型的数转换成大数的功能,用法为a.FromString(m,n),意思是把n位的字符型m赋给大数a;intToString(char*)实现把大数转变成字符型输出,用法为a.ToString(m)意思是把大数转换成字符型m;intCmp(CBigInt&A)实现大数比较,用法为C=a.Cmp(b),如果ab,则c=1,如果a=b则c=0,如果aA.m_nLeng

8、th)return1;if(m_nLengthvA.m_nLength)return-1;for(inti=m_nLength-1;i=0;i-)if(m_ulVaiueiA.m_ulVaiuei)return1;if(m_ulVaiueivA.m_ulVaiuei)return-1;return0;这个函数实现了大数的比较,如果a的长度小于b,那么avb,如果a的长度大于b,那么ab,如果ab的长度相等,那么,我们就从他们的高位开始比较,谁的高位比较大,那么谁就大。Mov(CBigInt&A)m_nLength=A.m_nLength;for(inti=O;ivBI_MAXLEN;i+)m_

9、ulVaiuei=A.m_ulVaiuei;这个函数比较好理解,就是把一个大数复制给另一个大数,复制的过程是,先把它的长度赋给它,再逐位进行复制。Mov(unsigned_int64A)if(A0xffffffff)m_nLength=2;m_ulaiue1=(unsignedlong)(A32);m_ulaiueO=(unsignedlong)A;elsem_nLength=l;m_ulVilueO=(unsignedlong)A;for(inti=m_nLength;ivBI_MAXLEN;i+)m_urViluei=O;这个函数是把一个64位的数赋值给一个大数,如果这个64位的大数前32

10、位为0,那么就直接把这个64位数的后32位赋给这个大数,如果这个64位数前32位不为0,那么就把这个64位数拆分为两部分,前32位赋给大数的高位,后32位赋值给大数的地位。Add(CBigInt&A)CBigIntX;X.Mov(*this);unsignedcarry=0;unsigned_int64sum=0;if(X.m_nLengthvA.m_nLength)X.m_nLength=A.m_nLength;for(unsignedi=0;ivX.m_nLength;i+)sum=A.m_ulaluei;sum=sum+X.m_ulValuei+carry;X.m_ulViluei=(unsignedlong)sum;carry=(unsigned)(sum32);X.m_ulVilueX.m_nLength=carry;X.m_nLength+=carry;returnX;这个函数实现大数的相加,基本原理是把两个大数的对应位相加再加上进位就得到大数的对应位,如果想加的数大于32位,那么就取得数的后32位作为大数的对应位,32位之前的数作为进位,留给下一位做加法运算,如果两个数相加的到的结果位数大于当前的位数,那么把该数扩展32位,把进位赋给它。Add(unsignedlongA)CBigIntX;X.Mov(*this);unsigned

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号