急求!!“1024位的RSA 公开密钥加密算法 ”数据结构课程设计!高手解答啊!!

老师给的题目,我止血药满足基本要求就行了!!
相信这好似一道经典的题目了吧,高手们一定都做过!!
有存留的程序代码给小妹一个!!
谢谢啊!老师的基本要求如下:

题目: RSA 公开密钥加密系统
在公开密钥加密系统中, 每个当事方均有一对密钥(e,d). 其中 e是公开密钥而d 是私有密钥. 公开密钥 e 是要公开的. 而私有密钥只有当事人自己知道. 假设当事双方 Alice 和 Bob 的密钥对分别为 (eA, dA) 和 (eB, dB). 如果 Alice 欲给 Bob 发送明文 m, Alice 用 Bob 的公开密钥 eB 将明文m 加密为 c = E(m, eB), 然后将密文 c 发送个Bob. 收到密文后, Bob 用自己的私有密钥 dB 将密文解密, 还原明文: m = D(c, dB).

对公开密钥加密系统的基本要求是, 用公开密钥e 加密的密文, 只有用与之对应的私有密钥 d 才能正确解密, 并且从公开密钥e 推算出私有密钥 d 是非常困难的.
基本要求
1.选择适当的基底以及适当的数据结构, 实现长整数运算类. 并且定义适当的运算符或者函数实现长整数的四则运算, 求余运算, 赋值运算或者交换(swap)运算.
2.实现ab mod n 的计算. 其中0 <= a, b < n. a, b, n 均为长整数.
3.实现欧几里德算法以及扩展的欧几里德算法.
4.选择或者实现一个加快的伪随机数算法. 使用Rabin_Miller 素性测试算法. 实现工业素数的产生算法.
5.实现生成RSA1024 密钥对函数::
void generate_rsa1024_key_pair(RSA_key& e, RSA_key& d);
6.实现RSA1024 加解密算法:
bool RSA1024(char result[1024/8], char const source[1024/8], RSA_key const& key);

较高要求
1.对公钥e 为 3, 257, 216 + 1, 给出特别实现的加密算法.
2.已知 n = pq 中的p和q, 利用中国剩余定理, 给出解密算法的快速实现.
3.实现
short remainder(Math_int const& a, short b),
它返回 a 除以 b 的余数. 求出[3, 216] 之间的所有素数. 从而可以快速判别一个长整数 a 是否包含这些素因子.
4.实现
Math_int remainder(Math_int const& a, Math_int const& b);
它返回a 除以 b 的余数 r, 使得 r 满足: -b/2 <= r < b/2. 利用这个函数实现欧几里德算法和扩展的欧几里德算法. 将这个结构和普通的欧几里德算法与扩展的欧几里德算法进行比较,
5.实现二进制欧几里德算法与扩展欧几里德算法, 并将结果与普通的欧几里德算法进行比较. 二进制欧几里德算法的递归描述为:
gcd(a, b) = 2 gcd(a/2, b/2); 如果a, b 均为偶数.
gcd(a, b) = gcd(a, b/2); 如果a 为奇数, b 为偶数;
gcd(a, b) = gcd(a/2, b); 如果a为偶数, b为奇数.:
gcd(a, b) = gcd(a-b, b); 如果 a, b 均为奇数.
6.利用公式
xy = (x12n + x0)(y12n + y0) = x1y122n +[(x0+x1)(y0+y1) – x1y1 - x0y0]2n + x0y0
给出长整数乘法的快速算法. 注意, 当 n 为16时, 就可以直接使用计算机本身的乘法运算计算. 分析这个算法的复杂度.
7.查阅资料, 实现求 a mod n 的Barrett 算法. 其中 a < n2.
8.用下面的牛顿迭代法可以求奇数a 的逆元 b = a-1 mod W, 其中 W = 2k
xn+1 = xn(2-axn)
如果适当选取初始值x0. 上面的迭代很快就收敛到a 的模 W 的逆元. 容易证明 如果 xn ≡1 mod 2k, 则, xn+1 ≡1 mod 22k. 用这里介绍的方法求a-1 mod 21024 . 其中 a 为奇数. 初始值x0 可以选取a. 其满足x0 ≡1 mod 8. 选择更好的x0, 使得x0 ≡1 mod 16.
联系方式:703970869@qq.com 谢谢昂!!!!

[我是不是复制粘贴的,我认真写的,你也认真看下就懂了]
我写的这个浅显易懂,看看你就明白了。举得有例子。

RSA算法举例说明
http://hi.baidu.com/lsgo/blog/item/5fd0da24d495666834a80fb8.html

空间里面好像还有算法

知道里面刚才回答了另个朋友的问题帖出来给你看看
http://zhidao.baidu.com/question/91261774.html?si=2
题目:用RSA算法加密时,已经公钥是(e=7,n=20),私钥是(e=3,n=20),用公钥对消息M=3加密,得到的密文是_____?
给出详细过程。 谢谢!
答:
你所说的:
n=20
d=7 公钥
e=3 私钥
对M=3 进行加密
M'=M^d%n (M的d次方,然后除以n取余数)
M'=3^7%20=2187%20=7 加密后等於7

对M'=7进行解密
M=M'^e%n=7^3%20=343%20=3 解密后又变成3了

你取的两个素数太小了,所以n太小根本起不了作用。至少要取1024位的数字
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-06-11
双亲算法非近亲结婚
第2个回答  2009-06-03
bupt de....
第3个回答  2009-05-31
研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,密码学是研究编制密码和破译密码的技术科学。

密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。密码学是在编码与破译的斗争实践中逐步发展起来的,并随着先进科学技术的应用,已成为一门综合性的尖端技术科学。它与语言学、数学、电子学、声学、信息论、计算机科学等有着广泛而密切的联系。

在西欧语文中之源於希腊语kryptós,“隐藏的”,和gráphein,“书写”)是研究如何隐密的传递信息的学科。在现代特别指对信息以及其传输的数学性研究,常被认为是数学和计算机科学的分支,和信息论也密切相关。著名的密码学者Ron Rivest解释道:「密码学是关於如何在敌人存在的环境中通讯」,自工程学的角度,这相当于密码学与纯数学的异同。密码学是 信息安全等相关议题,如认证、访问控制的核心。密码学的首要目是隐藏信息的涵义,并不是将隐藏信息的存在。密码学也促进了计算机科学,特别是在於电脑与网路安全所使用的技术,如访问控制与信息的机密性。密码学已被应用在日常生活:包括自动柜员机的芯片卡、电脑使用者存取密码、电子商务等等。

非对称加密算法的核心就是加密密钥不等于解密密钥,且无法从任意一个密钥推导出另一个密钥,这样就大大加强了信息保护的力度,而且基于密钥对的原理很容易的实现数字签名和电子信封。

比较典型的非对称加密算法是RSA算法,它的数学原理是大素数的分解,密钥是成对出现的,一个为公钥,一个是私钥。公钥是公开的,可以用私钥去解公钥加密过的信息,也可以用公钥去解私钥加密过的信息。

比如A向B发送信息,由于B的公钥是公开的,那么A用B的公钥对信息进行加密,发送出去,因为只有B有对应的私钥,所以信息只能为B所读取。

牢固的RSA算法需要其密钥长度为1024位,加解密的速度比较慢是它的弱点。

另外一种比较典型的非对称加密算法是ECC算法,基于的数学原理是椭圆曲线离散对数系统,这种算法的标准我国尚未确定,但是其只需要192 bit 就可以实现牢固的加密。所以,应该是优于RSA算法的。

对于加密,基本上不存在一个完全不可以被破解的加密算法,因为只要你有足够的时间,完全可以用穷举法来进行试探,如果说一个加密算法是牢固的,一般就是指在现有的计算条件下,需要花费相当长的时间才能够穷举成功(比如100年)

RSA加密演算法是一种非对称加密演算法。在公钥加密标准和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

1973年,在英国政府通讯总部工作的数学家克利福德·柯克斯(Clifford Cocks)在一个内部文件中提出了一个相应的算法,但他的发现被列入机密,一直到1997年未被发表。

RSA算法的可靠性基于分解极大的整数是很困难的。假如有人找到一种很快的分解因子的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到2004年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。

-------------------------------------------------------------------------

RSA加密算法
该算法于1977年由美国麻省理工学院MIT(Massachusetts Institute of Technology)的Ronal Rivest,Adi Shamir和Len Adleman三位年轻教授提出,并以三人的姓氏Rivest,Shamir和Adlernan命名为RSA算法。该算法利用了数论领域的一个事实,那就是虽然把两个大质数相乘生成一个合数是件十分容易的事情,但要把一个合数分解为两个质数却十分困难。合数分解问题目前仍然是数学领域尚未解决的一大难题,至今没有任何高效的分解方法。与Diffie-Hellman算法相比,RSA算法具有明显的优越性,因为它无须收发双方同时参与加密过程,且非常适合于电子函件系统的加密。

RSA算法可以表述如下:

(1) 密钥配制。假设m是想要传送的报文,现任选两个很大的质数p与q,使得:

(12-1);

选择正整数e,使得e与(p-1)(q-1)互质;这里(p-1)(q-1)表示二者相乘。再利用辗转相除法,求得d,使得:

(12-2);

其中x mod y是整数求余运算,其结果是x整除以y后剩余的余数,如5 mod 3 = 2。

这样得:

(e,n),是用于加密的公共密钥,可以公开出去;以及

(d,n),是用于解密的专用钥匙,必须保密。

(2) 加密过程。使用(e,n)对明文m进行加密,算法为:

(12-3);

这里的c即是m加密后的密文。

(3) 解密过程。使用(d,n)对密文c进行解密,算法为:

(12-4);

求得的m即为对应于密文c的明文。

RSA算法实现起来十分简捷,据说英国的一位程序员只用了3行Perl程序便实现了加密和解密运算。

RSA算法建立在正整数求余运算基础之上,同时还保持了指数运算的性质,这一点我们不难证明。例如:

(12-5);

(12-6)。

RSA公共密钥加密算法的核心是欧拉(Euler)函数ψ。对于正整数n,ψ(n)定义为小于n且与n互质的正整数的个数。例如ψ(6) = 2,这是因为小于6且与6互质的数有1和5共两个数;再如ψ(7) = 6,这是因为互质数有1,2,3,5,6共6个。

欧拉在公元前300多年就发现了ψ函数的一个十分有趣的性质,那就是对于任意小于n且与n互质的正整数m,总有mψ(n) mod n = 1。例如,5ψ(6) mod 6 = 52 mod 6= 25 mod 6 =1。也就是说,在对n求余的运算下,ψ(n)指数具有周期性。

当n很小时,计算ψ(n)并不难,使用穷举法即可求出;但当n很大时,计算ψ(n)就十分困难了,其运算量与判断n是否为质数的情况相当。不过在特殊情况下,利用ψ函数的两个性质,可以极大地减少运算量。

性质1:如果p是质数,则ψ(p) = (p-1)。

性质2:如果p与q均为质数,则ψ(p·q) = ψ(p)·ψ(q) = (p-1)(q-1)。

RSA算法正是注意到这两条性质来设计公共密钥加密系统的,p与q的乘积n可以作为公共密钥公布出来,而n的因子p和q则包含在专用密钥中,可以用来解密。如果解密需要用到ψ(n),收信方由于知道因子p和q,可以方便地算出ψ(n) = (p-1)(q-1)。如果窃听者窃得了n,但由于不知道它的因子p与q,则很难求出ψ(n)。这时,窃听者要么强行算出ψ(n),要么对n进行因数分解求得p与q。然而,我们知道,在大数范围内作合数分解是十分困难的,因此窃密者很难成功。

有了关于ψ函数的认识,我们再来分析RSA算法的工作原理:

(1) 密钥配制。设m是要加密的信息,任选两个大质数p与q,使得 ;选择正整数e,使得e与ψ(n) = (p-1)(q-1)互质。

利用辗转相除法,计算d,使得ed mod ψ(n) = ,即ed = kψ(n) +1,其中k为某一正整数。

公共密钥为(e,n),其中没有包含任何有关n的因子p和q的信息。

专用密钥为(d,n),其中d隐含有因子p和q的信息。

(2) 加密过程。使用公式(12-3)对明文m进行加密,得密文c。

(3) 解密过程。使用(d,n)对密文c进行解密,计算过程为:

cd mod n = (me mod n)d mod n

= med mod n

= m(kψ(n) + 1) mod n

= (mkψ(n) mod n)·(m mod n)

= m

m即为从密文c中恢复出来的明文。

例如,假设我们需要加密的明文代码信息为m = 14,则:

选择e = 3,p = 5,q = 11;

计算出n = p·q = 55,(p-1)(q-1) = 40,d = 27;

可以验证:(e·d) mod (p-1)(q-1) = 81 mod 40 = 1;

加密:c = me mod n = 143 mod 55 = 49;

解密:m = cd mod n = 4927 mod 55 = 14。

关于RSA算法,还有几点需要进一步说明:

(1) 之所以要求e与(p-1)(q-1)互质,是为了保证 ed mod (p-1)(q-1)有解。

(2) 实际操作时,通常先选定e,再找出并确定质数p和q,使得计算出d后它们能满足公式(12-3)。常用的e有3和65537,这两个数都是费马序列中的数。费马序列是以17世纪法国数学家费马命名的序列。

(3) 破密者主要通过将n分解成p·q的办法来解密,不过目前还没有办法证明这是唯一的办法,也可能有更有效的方法,因为因数分解问题毕竟是一个不断发展的领域,自从RSA算法发明以来,人们已经发现了不少有效的因数分解方法,在一定程度上降低了破译RSA算法的难度,但至今还没有出现动摇RSA算法根基的方法。

(4) 在RSA算法中,n的长度是控制该算法可靠性的重要因素。目前129位、甚至155位的RSA加密勉强可解,但目前大多数加密程序均采用231、308甚至616位的RSA算法,因此RSA加密还是相当安全的。

据专家测算,攻破512位密钥RSA算法大约需要8个月时间;而一个768位密钥RSA算法在2004年之前无法攻破。现在,在技术上还无法预测攻破具有2048位密钥的RSA加密算法需要多少时间。美国Lotus公司悬赏1亿美元,奖励能破译其Domino产品中1024位密钥的RSA算法的人。从这个意义上说,遵照SET协议开发的电子商务系统是绝对安全的。
相似回答