-
-
[作品提交]RSA加密解密的实现
-
发表于:
2008-6-28 12:06
11983
-
这学期刚学密码学,RSA算法相对简单,于是写了这个小软件.开发环境:VC++6.0。
RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。
数据加密算法RSA的关键在于大素数的生成,本软件采取数组形式解决大素数的存储和运算问题,可生成超过1024位的十进制数的大素数,以应用于数据加密。
RSA的缺点主要有:产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。分组长度太大,为保证安全性,n 至少也要 600 bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。
密钥生成步骤:
1,选两个保密的大素数p,q
2,计算n=p*q,计算欧拉函数值(p-1)*(q-1)
3,选一个整数e,且e小于欧拉函数值并且大于1,同时满足e与欧拉函数值互质
4,再选一个整数d,满足d是e在模欧拉函数值下的乘法逆员,因e与欧拉函数值
互质,由模运算可知它的乘法逆员一定存在。
5,以PK={e,n}为公钥,SK={d,n}为私钥。
加密:
先将明文比特数分组,使分组对应的10进制数小于n,然后对每个分组作加密运算
c=(m^e)mod(n),c就是密文
解密:
对密文分组进行m=(c^d)mod(n)
以上计算涉及到信息安全数学基础和现代密码学的知识,请参考《现代密码学(第二版)》和《信息安全数学基础》
均为清华大学出版社出版。
RSA是一个较为完善的公钥密码算法,不仅能够用于加密,还能用于签名,是被广泛
研究的公钥密码算法,从提出到现在20多年,经历了各种攻击的考验,被普遍认为是目前最
优秀的公钥密码算法之一。随着人类计算能力的不断提高,原来被认为是不肯能分解的大数已被
成功分解。1994年贝尔实验室用1600台计算机耗时8个月(用时4600年)成功分解RSA-129,就是n为129位10进制数。
在当前一般商业领域,用的是RSA-155(约512比特)是安全的。估计在未来一段比较长的时期,密钥长度介于1024至
2048比特之间的RSA是安全的。
软件界面:
对于明文是字母、数字、符号、汉字的各种组合都能正确加密解密
测试数据:
加密密钥:
{E, N} = { 4058909522923781627, 153870764068524986667864920209111888657}
解密密钥:
{D, N} = { 14781867977920790397315320392274696923,
153870764068524986667864920209111888657}
明文:放假过来玩儿!<>:L"*)(&fafg5435
密文:
60723915094460019985764292058618742154703013068749621244689639385694447422914889064196589028269619112
0965431827171
解密后:放假过来玩儿!<>:L"*)(&fafg5435
下图是软件执行性能的测试结果
下图是软件流程图:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!