设计说明
RSA算法为一种非对称密码算法,选取两个互异大素数p,q,计算n=pq,f=(p-1)(q-1),选取不同于q,p的另一素数e并计算在模f下的乘法逆元d,若明文为m,即可根据加密算法c=me mod n进行加密编码,解密时使用m=cd mod n即可。e也称为加密指数,d被称为解密指数。以上参数中,称{e,n}为公开**,{d,n,p,q}为私用**。
设计中先将一定范围内的所有素数存储在数组内,实验中的素数范围为(1000,100000),然后随机选取两个大素数,之后计算f,n,随机选取另一素数e,使用扩展欧几里得算法来求取e在模f下的乘法逆元d,最后利用快速幂取模函数来对原文进行加密和解密。实验中的明文为存储在字符数组内的a-z字符。
模块说明
- 素数生成模块
素数筛选说明:该函数筛选出1000~100000内的素数并存储在数组num内,传入参数为整形数组,存储筛选出的素数,返回值为筛选出的素数个数,实现如下:
素数选取说明:通过随机的方法,在数组内选取一个素数并返回,传入参数为筛选出的素数数组及数组长度
- 乘法逆元求取模块
该函数实现扩展欧几里得算法,传入四个参数分别对应:数a,模f及两个临时变量,返回值为a的模反元素即在模f下a的乘法逆元
- 加密解密模块
因为底数及幂都是大数,应用数学函数库实现幂计算较为耗时,故该函数实现快速幂取模算法,主要用于加密和解密的实现:三个参数分别为底数、幂、模值,返回值为幂取模的结果。
- 主函数模块
因为选取的数据及运算结果都为大数,故大多采用了long long int类型声明,存入明文a-z字符串,调用以上各模块来实现完整的RSA算法。因为大素数随机生成选取,故主函数模块进行了判断,选取互异的p,q,e且满足e
相关文章: