基于rsa加密算法本科论文

基于rsa加密算法本科论文
基于rsa加密算法本科论文

桂林理工大学

GUILIN UNIVERSITY OF TECHNOLOGY

本科毕业设计(论文) 题目:数据通信中的RSA加密算法的设计与实现

摘要

数据通信是依照一定的通信协议,利用数据传输技术在两个终端之间传递数据信息的一种通信方式和通信业务。随着数据通信的迅速发展而带来了数据失密问题。信息被非法截取和数据库资料被窃的事例经常发生,在日常生活中信用卡密码被盗是常见的例子。所以数据加密成为十分重要的问题,它能保证数据的安全性和不可篡改性。RSA加密算法以它难以破译的优点,被广泛的使用在电子商务和VPN中。

本文针对非对称性加密RSA算法,采用软件Visual C++6.0进行程序编写。根据模乘法运算和模指数运算的数学原理所编写的程序在进行测试后,能够通过输入两个素数进行运算从而实现明文与密文之间的转换,然后通过对公钥和私钥的管理,对所传输的数据进行保护,让数据只能由发送者和接收者阅读,以达到数据通信中数据无法被他人破译的目的。

关键词:RSA算法,数据通信,加密, 解密。

Data communication of the RSA encryption algorithm in the Design

and Implementation

Teacher:Chen Fei student:Lu Hui

Abstract

Data communications in accordance with certain communication protocols, the use of data transmission technology in the transmission of data between two terminals as a means of communication of information and communication business. With the rapid development of data communications and has brought the issue of data compromise. Unlawful interception of information and database information on frequent instances of theft, credit card in their daily lives stolen passwords is a common example. Therefore, data encryption has become a very important issue, it can ensure data security and can not be tamper with nature. RSA encryption algorithm to the merits of it difficult to decipher, was widely used in the e-commerce and VPN.

In this paper, asymmetric RSA encryption algorithm, the use of software for Visual C + +6.0 programming. According to Die multiplication and modular exponentiation by the mathematical principles in the preparation of test procedures can be adopted for the importation of two prime numbers and computing in order to achieve explicit conversion between the ciphertext, and then through a public key and private key management, for the transmission of data protection, so that data can only be made by the sender and the recipient to read, in order to achieve data communications data can not be the purpose of deciphering the others.

Keywords: RSA algorithms, data communication, encryption, decryption.

目录

摘要................................................................. II Abstract ............................................................. III 第1章引言.. (1)

1.1题目背景 (1)

1.2国内外现状 (1)

1.3本课题的主要工作 (2)

第2章数据通信中的加密技术 (3)

2.1数据加密技术的起源和发展 (3)

2.2数据加密的方法 (3)

2.3密钥的管理 (5)

2.4数据加密的标准 (6)

2.5数据加密的应用 (6)

2.6本章小结 (7)

第3章数据加密中的RSA算法 (8)

3.1 RSA公钥密码体制概述 (8)

3.2 RSA公钥密码体制安全性分析 (9)

3.3 RSA算法的缺点 (10)

3.4 本章小结 (10)

第4章 RSA数据加密中的实现 (11)

4.1随机大素数的产生 (11)

4.1.1素数的分布 (12)

4.1.2大素数生成的方法 (12)

4.1.3 Miller Rabin素性测试法 (13)

4.1.4基于Miller Rabin素性测试法的新的素数生成方法 (13)

4.2密钥的生成及加密和解密 (15)

4.2.1最大公因子gcd运算 (15)

4.2.2模n求逆元运算 (17)

4.2.3模n的大数幂乘运算 (18)

4.2.4模n的大数幂乘运算 (18)

4.3 RSA算法分析 (19)

4.3.1 RSA安全性分析 (19)

4.3.2 RSA时间复杂度分析 (20)

4.4本章小结 (20)

第5章 RSA算法的实现 (21)

5.1选定组合算法的准则 (22)

5.2模幂组合算法的实现 (22)

5.3试验与运行结果 (22)

总结 (25)

参考文献 (26)

致谢 (27)

附录.................................................. 错误!未定义书签。

第1章引言

1.1题目背景

在当今的信息社会中,每天都有大量的信息在传输、交换、存储和处理,而这些处理过程几乎都要依赖强大的计算机系统来完成。一旦计算机系统发生安全问题,就可能造成信息的丢失、篡改、伪造、假冒,以及系统遭受破坏等严重后果。因此,如何保证计算机系统的安全,是当前一个需要立即解决的十分严峻的问题。

通常保障网络信息安全的方法有两大类:一是以防火墙技术为代表的被动防卫型,二是建立在数据加密,用户授权确认机制上的开放型网络安全保障技术。

防火墙技术,就是在局域网与外部网络之间设立一个服务器,将它们之间隔离开来,建立起一个安全网关,从而保护内部网免受非法用户的侵入。

数据加密技术是可以与防火墙配合使用的一种安全技术,这种技术可以提高信息系统及数据的安全性和保密性、防止秘密数据被外部破解所采用的主要技术手段之一。按其不同的作用,数据加密技术主要分为数据传输、数据存储、数据完整性的鉴别以及密钥管理技术四种。加密技术是通过计算机网络中的加密机构,把网络中的各种原始数字信息(明文)按照某种特定的加密算法变换成与

明文完全不同的数字信息,即转换成密文。计算机网络中的加密技术主要采用链路加密和端对端加密等两种方式。

通常情况是将这两种加密模式结合起来共同使用,即可保证网内用户的数据安全,又可提供用户之间的身份鉴别与认证。

1.2国内外现状

RSA被广泛应用于各种安全或认证领域,如web服务器和浏览器信息安全、Email 的安全和认证、对远程登录的安全保证和各种电子信用卡系统的核心。硬件上,如安全电话、以太网卡和智能卡也多采用RSA技术。而几乎所Internet安全协议如

S/MIME,SSL和S/WAN都引入了RSA加密方法。IS09796标准把RSA列为一种兼容的加密算法,使得RSA的应用目前非常广泛。RSA模数n=pq是RSA算法的安全性的核心。如果模数n被分解,则RSA体制立刻被攻破。如果RSA算法是安全的,那么n=pq必须足够大,使得因式分解模数n在计算上不可行的。基于安全性考虑,实际应用中所选择的素数p和q至少应该为100位以上的十进制数,相应的模数n=pq将是200位的十进制数。C E Shannon建议使用至少100位长度的大素数,从而得到长度为200位以上的大整数模数n。

RSA算法的缺点是加密速度慢,模数n的长度越大,加/解密运算所需要的时间就越长,算法实现的速度也就越慢。为了尽可能使用大的模数而又不影响系统实现的速度,实际应用中通常使用专门的硬件实现RSA算法。

最重要的影响速度的实现细节是加/解密中的大数运算。大数模幂乘运算是RSA 算法的核心运算,也是运算速度提高的关键。高效的大数模幂乘算法可以有效提高系

统速度。需要每做一次平方或乘法运算后,就要作一次模运算,当n的值很大时,做一次模运算所需的时间比做一次平方或一次乘法所需的时间更多,是影响算法实现速度的关键。但在实际加密解密过程中,n可能是几个数的乘积,如RSA算法中,n是两个大素数的乘积。这时可通过中国剩余定理进行变换,降低指数的数量级.

1.3本课题的主要工作

本文选择RSA数字加密体制为研究对象,讨论了RSA实现过程中,每一步的具体实现算法。RSA加密算法是第一个成熟的、迄今为止理论上最成功的公开钥密系统。它的安全性基础是数论和计算复杂性理论中的下述论断:

求两个大素数的乘积在计算上是容易的,但若要分解两个大素数的积而求出它的素因子则在计算上是困难的。但是,在进行加密和解密运算时的整数求幂运算耗时很大,影响了运算速度,因此,人们提出了多种实现算法,以加快运算速度,例如本文提到的SMM算法和指数2K进制化法等。这些算法都是从某一方面入手,在一定程度上加快了运算速度。本文通过分析这些算法的特点,提出了一种综合性的组合方法,在原有算法的基础上更进一步地加快了运算速度。

本文首先介绍了加密算法的数学基础,从数学理论上分析了RSA算法的原理;然后通过C++程序进行实现。

第2章数据通信中的加密技术

随着信息化的应用水平不断提高,尤其是电子政务和电子商务的蓬勃发展,互联网络的信息安全问题越来越引起全社会的重视。数字化办公和生活面临一系列的严重“威胁”。由于互联网的开放性,我们面临各种各样的安全威胁。网上传输的邮件可能被截取,信息的内容可能被篡改;电子商务过程中,信用卡帐号和密码可能暴露在第二者面前;一些人可能会假冒合法用户身份或者假冒网站来用于一些非法目的,而事后又对自己的行为进行抵赖:系统可能由于黑客的攻击而无法提供有效的服务。这些问题给计算机从业人员揭示信息安全问题的严重性。

因此如何保证信息的机密性、完整性、不可抵赖性、有效性,成为网络安全关注的核心问题。人们由此采用防火墙和数据加密等技术来保障网络本身的安全。

2.1数据加密技术的起源和发展

早在互联网出现之前,密码技术已经广泛应用于军事和民用方面。有记载的最早的密码系统可能是希一腊历史学家Polybios发明的Polvbios格板,它是一种替换密码系统。人们很早以前将密码系统分为代替和换位密码两种。

从密码史的发展来看,1949年,信息论的创始人仙农(C. E.Shannon)发表了一篇著名的文章,论证了一般经典加密方法都是可以破解的。到了60年代,随着电子技术、信息技术的发展及结构代数、可计算性理论和复杂度理论的研究,密码学又进入了一个新的时期。我们当前所应用的密码体制,都是属于近代非经典的密码体制。70年代后期出现的数据加密标准DES(DataFncryptionStandard)和公开密钥密码(非对称密码)体制(Publickeycrypto一system)是近代密码学发展史上的两个重要里程碑。

目前,最著名公开密钥密码体制是RSA体制,它是由美国MIT的二位科学家Rivest, Shamir不II Adleman于1976年提出的,是一种基于数论中大数分解的理论。由于RSA的安全性和实用性,它是当前使用最广泛的公钥密码系统,即可以进行加密,也可以进行数字签名。保障了数据的完整性、机密性,解决了身份认证问题和不可抵赖性问题.

2.2数据加密的方法

数据加密的方法通常分为两大类:对称式加密体制 (常规密钥密码体制)和非对称式加密体制(公开密钥密码体制)。

对称式加密就是加密和解密使用同一个密钥,通常称之为"Session Key”这种加密技术曾经被广泛采用,其原理如图2-1所示。如美国政府所采用的DES加密标准

就是一种典型的“对称式”加密法,它的Session Key长度为56位。

非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥’夕,它们两个必需配对使用,否则不能打开加密文件。这里的“公钥”是指可以对外公布的,“私钥”则不能,只能由持有人一个人知道。它的优越性就在这里,因为对称式的加密方法如果是在网络上传输加密文件就很难把密钥告诉对方,不管用什么方法都有可能被他人窃听到。而非对称式的加密方法有两个密钥,目_其中的“公钥”是可以公开的,也就不怕别人知道,收件人解密时只要用自己的私钥即可以,这样就很好地避免了密钥的传输安全性问题。非对称加密工作原理如图2-2所示。

2.3密钥的管理

密钥既然要求保密,这就涉及到密钥的管理问题,密钥的管理涉及到以下几个方面:

(1)密钥使用的时效和次数

如果用户使用同样密钥多次与其他用户交换信息,那么密钥也同其它任何密码一样存在着一定的安全性。虽然用户的私钥是不对外公开的,但是也很难保证私钥长期的保密性,很难保证长期以来不被泄漏。如果入侵者偶然地知道了用户的密钥,那么用户曾经和其他用户交换的每一条消息都不再是保密的。另外使用一个特定密钥加密的信息越多,提供给窃听者的材料也就越多,从某种意义上来讲也就越不安全了。因此,一般强调仅将一个对话密钥用于一条信息中或一次对话中,或者建立一种按时更换密钥的机制以减小密钥暴露的可能性。

(2)多密钥的管理

假设在某机构中有100用户,如果任意两个用户之间可以进行秘密对话,那么总共需要多少密钥呢?每个人需要知道多少密钥呢? 如果任何两个用户之间通信需要不同的密钥,则总共需要4950个密钥,而且每个人应记住99个密钥。如果机构的用户更多,这种办法就显然过于平庸。

Kerberos提供了一种解决这个较好方案,它是由MIT发明的,使保密密钥的管理和分发变得十分容易,但这种方法本身还存在一定的缺点。为能在互联网上提供一个实用的解决方案,Kerberos建立了一个安全的、可信任的密钥分发中心(Key Distribution Center,KDC),每个用户只要知道一个和KDC进行会话的密钥就可以了,而不需要知道成百上千个不同的密钥。

2.4数据加密的标准

对称密钥加密算法DES (Data Encryption Standard)是由工BM公司在70年代发展起来的,并经政府的加密标准筛选后,于1977年被正式批准并作为美国联邦信息处理标准。DES使用64位密钥对64位的数据块进行加密,并对64位的数据块进行16轮编码。64位密钥中,有8位奇偶校验位,实际密钥长度只有56位。每轮编码时,一个48位的“每轮”密钥值由_5 6位的完整密钥得出来。DES用软件进行解码需用很长时间,而用硬件解码速度非常快。对于DES的最后一次评估是在1994年,美国己决定1998开始,不在使用DES。目前,新的加密标准AES正在征集、评估和制定中。尽管如此,DES对于推动密码理论的发展和应用起了重大作用。

RSA是另外一种非常著名的公钥加密体制,由Ron Rivest, AdiShami:以及Leonard Adleman于1978年提出,一该体制至今仍被公认为是一个安全性能良好的密码体制。该算法是基于大数不可能被质因数分解假设的公钥体系。简单地说就是找两个很大的质数。一个对外公开的为“公钥”(Public key),另一个不告诉任何人,称为“私钥”(Private key)。这两个密钥是互补的,也就是说用公钥加密的密文可以用私钥解密,反过来也一样。

DES被公认为世界上第一个实用的密码算法标准。它的出现适应了电子化和信息化的要求,是一种加/解密标准,适合于硬件实现,因此它的算法被制成专门的芯片,应用于加密机中。DES现在仍被广泛应用于金融和商业领域。RSA则是非对称密钥的实际标准。

在实际应用中,通常是DES和RSA加密算法同时使用。由于DES加确牟密速度上的优势,因此数据的加/解密通常是用DES完成的,而 DES使用的密钥是通过应用RSA 算法生成的数字信封来传递的,保障了密钥传递的安全性。

2.5数据加密的应用

数据加密技术的应用是多方面的,但最为广泛的还是在电子商务和VPN上的应用。

(1)在电子商务方面的应用

电子商务(E-business)允许顾客和商家可以在网上进行各种商务活动,同时不必担心相应的商务信息被盗用,比如信用卡号码、商品报价等。RSA的出现,提高网上交易的安全性,从而使电子商务走向实用成为可能。

NETSCAPE公司提供了一种基于RSA的安全套接层协议SSL(Secure Sockets Layer)即为数据加密技术在电子商务方面应用的一个典型案例。

SSL2. 0用电子证书(Electric certificate)来实行身份进行验证后,双方就可以用保密密钥进行安全的会话了。它同时使用“对称”和“非对称”加密方法,在客户与电子商务的服务器进行沟通的过程中,客户会产生一个Session Key,然后客户用服务器端的公钥将Session Key进行加密,再传给服务器端,在双方都知道Session Key后,传输的数据都是以Session Key进行加密与解密的,但服务器端发给用户的公钥必需先向有关发证机关中请,以得到公证。

SSL协议是一个比较优秀而久经考验的网络安全协议,一般情况下能够抵抗窃

听、篡改、会话劫持、中间人等多种攻击手段。协议的设计模式为“契入式”,与高层应用协议和低层网络协议无关,可以方便地集成到多种网络环境中去,可根据不同的安全需求,选择协议提供得多种密码算法和密钥交换协议。SSL目前在Web和电子商务中的应用相当广泛。

(2)加密技术在VPN中的应用

目前,跨地域国际化的机构越来越多。一个机构在多个城市、国家设有分支机构。每一个机构都有自己的局域网LAN (Local AreaNetwork)。事实上,很多机构一般租用专用线路来连结这些虚拟的局域网。这种情况下,机构内部的重要文件、数据是通过广域网进行传输,因此网络的安全问题最为重要。具有加密/解密功能的路由器等设备的出现,使通过广域网组成局域网成为可能,即所谓的的虚拟专用网(Virtual Private Network, VPN)。当数据离开发送者所在的局域网时,该数据首先被用户湍连接到互联网上的路由器进行硬件加密,数据在互联网上是以加密的形式传送的,当达到目的LAN的路由器时,该路由器就会对数据进行解密,这样目的LAN中的用户就可以看到真正的信息了。而加密解密过程对于普通的非网络管理用户来说,是透明的,既普通用户无需考虑VPN及加密解密的相关问题。因此,对普通用户来说, VPN在使用过程中和一般

LAN没有任何区别。

2.6本章小结

本章对数据加密技术作了简要的介绍,其中包括数据加密技术的起源、发展,数据加密技术的概念,密钥管理等密码技术各方面的内容。此外还对数字签名技术作了介绍。数字签名技术实际上是数据加密技术在应用上的延伸,是目前网上交易活动中,身份验证技术的重要组成部分。而基于公开密钥机制的数字签名技术在应用中,占有统治地位,尤其是基于RSA公钥的数字签名体制在应用中更为广泛。在接下来的一章,就将详细介绍基于RSA的数字签名体制。

第3章数据加密中的RSA算法

目前企业面临的计算环境和过去有很大的变化,许多数据资源能够依靠网络来远程存取,而且越来越多的通讯依赖于公共网络公共网络(如 Internet),而这些环境并不保证实体间的安全通信,数据在传输过程可能被其它人读取或篡改。

加密将防止数据被查看或修改,并在原本不安全的信道上提供安全的通信信道,它达到以下目的:

保密性:防止用户的标识或数据被读取。

数据完整性:防止数据被更改。

身份验证:确保数据发自特定的一方。

3.1 RSA公钥密码体制概述

RSA公钥密码体制于1978年,由美国麻省理工学院Rivest,Shami:和Adleman 二人提出的,至今为止仍被公认为是公钥密码体制中最优秀的加密算法,被认为是密码学发展史上的第二个里程碑.它是一种特殊的可逆摸指数运算的加密体制,其理论基础是数论中的一条重要论断:求两个大素数之积是容易的,而将一个具有大素数因子的合数进行分解却是非常困难的。除了用于加密之外,它还能用于数字签名和身份认证。RSA公钥密码体制过程描述如下:

(1)选取两个大素数p 和q .

(2)计算pq n =(公开),1)()(++-=Φq p pq n 欧拉函数)。

(3)随机选取正整数e, (n)e l Φ<<,满足1(gcd =n))(e,Φ, e 是公开的加密密钥。

(4)计算d ,满足Φ(n))(de mod 1≡. d 是保密的解密密钥。

(5)加密变换:对明文Zn c ∈,明文为(Zn 为明文空间)

n m c e mod =

(6)解密变换:对密文Zn c ∈,明文为 n c m d mod =

可以证明,解密变换是加密变换的逆变换。

例:

(1)生成密钥:

选择两个互质的质数2532311

2311====*, n , q p ; 22011=)) (q-(p-

取3e = ; 由1(mod220) de =,得d=147;

所以,保密的解密密钥为d=147,公开的加密密钥公钥为e=3,n=253;明文空间为}, , , {Zn 252251210 =

(2)加密原文:

假设原文m 的数字为16_5,用公钥加密原文。

110253mod 1653== C

(3)解码密文:

165253mod 110147== m

A=C ,由此可以看出RSA 算法的一般过程。

3.2 RSA 公钥密码体制安全性分析

RSA 体制中,加密密钥e 与大整数n 是公开的,而解密密钥d 与大素数p 和q 是保密的。虽然在RSA 的加密与解密密钥建立后,p 和q 不再需要,但p 和q 也绝不能泄露。若n 被分解,则也就不保密,e 公开,d 就可以计算出来,RSA 便被破译。己知n ,求得)(n Φ,则P 和q 可以求得。因为根据欧拉定理,1)()(++-=Φq p pq n ,

又有pq q p q p 4)()(22-+=-据此列出方程:

???-+=-++-=Φpq

q p q p q p pq n 4)()(1)()(22 由以上方程组,可以求得p 和q 。因为p 和q 都是大素数,根据现在已知的结果,因子分解n 是最好的算法,此时复杂性为:)ln(ln )ln(n n e

若n 为200位于进制数,则用每秒107次运算的高速计算机,也要108年才能得到计算结果。可见,RSA 的素数分解确实存在一定的难度。

为安全起见,对p 和q 要求:p 和q 的相差不大;(p-1)和(q-1)有大素数因子;1)-q l,-gcd(p 很小,满足这样条件的素数称做安全素数。

RSA 的出现使得大整数分解因式这一古老的问题再次被重视,近些年来出现的不少比较高级的因数分解方法使“安全素数”的概念也在不停的演化。所以,选择传统上认为是“安全素数”并不一定有效的增加安全性,比较保险的方法就是选择足够大的素数。因为数越大,对其分解因式的难度也就越大!对n 和密钥长度的选择取决于用户保密的需要。密钥长度越大,安全性也就越高,但是相应的计算速度也就越慢。由于高速计算机的出现,以前认为己经很具安全性的512位密钥长度己经不再满足人们的需要。1997年,RSA 组织公布当时密钥长度的标准:个人使用768位密钥,公司使用1024位密钥,而一些非常重要的机构使用2048位密钥。

3.3 RSA 算法的缺点

RSA 的缺点主要有:

A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

B)分组长度太大,为保证安全性,n 至少也要 600 bits 以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。

3.4 本章小结

RSA 算法在理论上的重大缺陷就是并不能证明分解因数绝对是困难的。RSA 方法既可用于保密、也能用于签名和认证,许多流行的操作系统如微软、Apple, Sun 和Novell 都在其产品上融入了RSA 。同时,RSA 也被广泛应用于各种安全或认证领域,如web 服务器和浏览器信息安全、Email 的安全和认证、对远程登录的安全保证和各种电子信用卡系统的核心。硬件上,如安全电话、以太网卡和I 智能卡也多采用RSA 技术。而且几乎所有Internet 安全协议如SMME, SSL 不II SWAN 都引入了RSA 加密方法。IS09796标准把RSA 列为一种兼容的加密算法,使得RSA 的应用目前非常广泛。

RSA加密算法_源代码__C语言实现

RSA算法 1978年就出现了这种算法,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。 RSA的安全性依赖于大数难于分解这一特点。公钥和私钥都是两个大素数(大于100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。 密钥对的产生。选择两个大素数,p 和q 。计算:n = p * q 然后随机选择加密密钥e,要求e 和( p - 1 ) * ( q - 1 )互质。最后,利用Euclid 算法计算解密密钥d, 满足e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) )其中n和d也要互质。数e和n是公钥,d是私钥。两个素数p和q 不再需要,应该丢弃,不要让任何人知道。加密信息m(二进制表示)时,首先把m分成等长数据块m1 ,m2,..., mi ,块长s,其中2^s <= n, s 尽可能的大。对应的密文是:ci = mi^e ( mod n ) ( a ) 解密时作如下计算:mi = ci^d ( mod n ) ( b ) RSA 可用于数字签名,方案是用( a ) 式签名,( b )式验证。具体操作时考虑到安全性和m信息量较大等因素,一般是先作HASH 运算。RSA 的安全性。RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA 就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前,RSA的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解140多个十进制位的大素数。因此,模数n必须选大一些,因具体适用情况而定。 由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。 */ #include #include #include

RSA加密算法的基本原理

RSA加密算法的基本原理 1978年RSA加密算法是最常用的非对称加密算法,CFCA 在证书服务中离不了它。但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解。我们经过整理和改写特别推荐给大家阅读,希望能够对时间紧张但是又想了解它的同事有所帮助。 RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest,Adi Shamir,Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。 RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。 RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表: 可能各位同事好久没有接触数学了,看了这些公式不免一头雾水。别急,在没有正式讲解RSA加密算法以前,让我们先复习一下数学上的几个基本概念,它们在后面的介绍中要用到: 一、什么是“素数”? 素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。 二、什么是“互质数”(或“互素数”)? 小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。”这里所说的“两个数”是指自然数。 判别方法主要有以下几种(不限于此): (1)两个质数一定是互质数。例如,2与7、13与19。 (2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与26。(3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。(4)相邻的两个自然数是互质数。如15与16。 (5)相邻的两个奇数是互质数。如49与51。 (6)大数是质数的两个数是互质数。如97与88。 (7)小数是质数,大数不是小数的倍数的两个数是互质数。如7和16。 (8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,

RSA加密算法java编程实现

一、RSA加密算法的原理 (1)、RSA算法描述 RSA公钥密码体制的基本原理:根据数论,寻求两个大素数比较简单,而将他们的乘积分解开则极为困难。 (2)、RSA算法密钥计算过程: 1.用户秘密选取两个大素数p 和q,计算n=pq,n称为 RSA算法的模数,公开。 2.计算出n的欧拉函数Φ(n) = (p-1)×(q-1),保密。 3.从(1, Φ(n))中随机地选择一个与Φ(n)互素的数e作为加 密密钥,公开。 4.计算出满足下式的d 作为解密密钥,保密。 ed=1 mod Φ(n) (3)、RSA算法密钥: 加密密钥PK = |e, n| 公开 解密密钥SK = |d, n| 保密 (4)、RSA算法加密解密过程: RSA算法属于分组密码,明文在加密前要进行分组,分组 的值m 要满足:0 < m < n 加密算法:C = E(m) ≡me mod n 解密算法:m = D(c) ≡cd mod n (5)、RSA算法的几点说明: 1.对于RSA算法,相同的明文映射出相同的密文。

2.RSA算法的密钥长度:是指模数n的长度,即n的二进 制位数,而不是e或d的长度。 3.RSA的保密性基于大数进行因式分解很花时间,因此, 进行RSA加密时,应选足够长的密钥。512bit已被证明 不安全,1024bit也不保险。 4.RSA最快情况也比DES慢100倍,仅适合少量数据的加 密。公钥e取较小值的方案不安全。 二.RSA公钥加密算法的编程实现 以下程序是java编写的实现RSA加密及解密的算法 import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import javax.crypto.Cipher; //RSATest类即为测试类 public class RSATest { //主函数 public static void main(String[] args) { try { RSATest encrypt = new RSATest(); String encryptText = "encryptText";//输入的明文 KeyPair keyPair = encrypt.generateKey();//调用函数生成密钥对,函数见下 RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); byte[] e = encrypt.encrypt(publicKey, encryptText.getBytes()); //调用自己编写的encrypt函数实现加密, byte[] de = encrypt.decrypt(privateKey, e); //调用自己编写的decrypt函数实现解密, System.out.println(toHexString(e)); //输出结果,采用ASSIC码形式

密码学-RSA加密解密算法的实现课程设计报告

密码学课程报告《RSA加密解密算法》 专业:信息工程(信息安全) 班级:1132102 学号:201130210214 姓名:周林 指导老师:阳红星 时间:2014年1月10号

一、课程设计的目的 当前最著名、应用最广泛的公钥系统RSA是在1978年,由美国麻省理工学院(MIT)的Rivest、Shamir和Adleman在题为《获得数字签名和公开钥密码系统的方法》的论文中提出的。 RSA算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册,人们用公钥加密文件发送给个人,个人就可以用私钥解密接受。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。 公钥加密算法中使用最广的是RSA。RSA算法研制的最初理念与目标是努力使互联网安全可靠,旨在解决DES算法秘密密钥的利用公开信道传输分发的难题。而实际结果不但很好地解决了这个难题;还可利用RSA来完成对电文的数字签名以抗对电文的否认与抵赖;同时还可以利用数字签名较容易地发现攻击者对电文的非法篡改,以保护数据信息的完整性。此外,RSA加密系统还可应用于智能IC卡和网络安全产品。 二、RSA算法的编程思路 1.确定密钥的宽度。 2.随机选择两个不同的素数p与q,它们的宽度是密钥宽度的1/2。 3.计算出p和q的乘积n 。 4.在2和Φ(n)之间随机选择一个数e , e 必须和Φ(n)互素,整数e 用做加密密钥(其中Φ(n)=(p-1)*(q-1))。 5.从公式ed ≡ 1 mod Φ(n)中求出解密密钥d 。 6.得公钥(e ,n ), 私钥 (d , n) 。 7.公开公钥,但不公开私钥。 8.将明文P (假设P是一个小于n的整数)加密为密文C,计算方法为: C = Pe mod n 9.将密文C解密为明文P,计算方法为:P = Cd mod n 然而只根据n和e(不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密 三、程序实现流程图: 1、密钥产生模块:

用实例讲解RSA加密算法(精)

可能各位同事好久没有接触数学了,看了这些公式不免一头雾水。别急,在没有正式讲解RSA加密算法以前,让我们先复习一下数学上的几个基本概念,它们在后面的介绍中要用到: 一、什么是“素数”? 素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。 二、什么是“互质数”(或“互素数”)? 小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。”这里所说的“两个数”是指自然数。 判别方法主要有以下几种(不限于此): (1)两个质数一定是互质数。例如,2与7、13与19。 (2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与26。(3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。(4)相邻的两个自然数是互质数。如15与16。 (5)相邻的两个奇数是互质数。如49与51。 (6)大数是质数的两个数是互质数。如97与88。 (7)小数是质数,大数不是小数的倍数的两个数是互质数。如7和16。 (8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。等等。 三、什么是模指数运算? 指数运算谁都懂,不必说了,先说说模运算。模运算是整数运算,有一个整数m,以n 为模做模运算,即m mod n。怎样做呢?让m去被n整除,只取所得的余数作为结果,就

RSA加密算法及实现

数学文化课程报告题目:RSA公钥加密算法及实现

RSA公钥加密算法及实现 摘要 公钥密码是密码学界的一项重要发明,现代计算机与互联网中所使用的密码技术都得益于公钥密码。公钥密码是基于数学的上的困难问题来保证其性。其中RSA加密算法是一项重要的密码算法,RSA利用大整数的质数分解的困难性,从而保证了其相对安全性。但如果发现了一种快速进行质数分解的算法,则RSA算法便会失效。本文利用C 语言编程技术进行了RSA算法的演示[1]。 关键词:C语言编程、RSA算法、应用数学。

RSA public key encryption algorithm Abstract Public key cryptography is an important invention in cryptography, thanks to public key cryptography, and it is used in modern computer and Internet password technology. Public key cryptography is based on the mathematics difficult problem to ensure its confidentiality. The RSA public key encryption algorithm is an important cryptographic algorithm, RSA using the difficulty that large integer is hard to be factorized into prime Numbers to ensure it safety. But if you can find a kind of fast algorithm to do the factorization, RSA algorithm will be failure. In this paper we used C language programming technology to demonstrate the RSA algorithm. Keywords:C language programming、RSA algorithm、Applied mathematics

RSA加密算法

RSA加密算法 RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。 RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。 RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表: 可能各位同事好久没有接触数学了,看了这些公式不免一头雾水。别急,在没有正式讲解RSA加密算法以前,让我们先复习一下数学上的几个基本概念,它们在后面的介绍中要用到: 一、什么是“素数”? 素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。 二、什么是“互质数”(或“互素数”)? 小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。”这里所说的“两个数”是指自然数。 判别方法主要有以下几种(不限于此): (1)两个质数一定是互质数。例如,2与7、13与19。 (2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与 26。 (3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。 (4)相邻的两个自然数是互质数。如 15与 16。 (5)相邻的两个奇数是互质数。如 49与 51。 (6)大数是质数的两个数是互质数。如97与88。 (7)小数是质数,大数不是小数的倍数的两个数是互质数。如 7和 16。(8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。等等。

RSA加密算法

RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它。但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解。我们经过整理和改写特别推荐给大家阅读,希望能够对时间紧张但是又想了解它的同事有所帮助。 RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest,Adi Shamir,Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。 RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。 RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表: 可能各位同事好久没有接触数学了,看了这些公式不免一头雾水。别急,在没有正式讲解RSA加密算法以前,让我们先复习一下数学上的几个基本概念,它们在后面的介绍中要用到: 一、什么是“素数”? 素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。 二、什么是“互质数”(或“互素数”)? 小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。”这里所说的“两个数”是指自然数。 判别方法主要有以下几种(不限于此): (1)两个质数一定是互质数。例如,2与7、13与19。 (2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与26。 (3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。 (4)相邻的两个自然数是互质数。如15与16。 (5)相邻的两个奇数是互质数。如49与51。 (6)大数是质数的两个数是互质数。如97与88。 (7)小数是质数,大数不是小数的倍数的两个数是互质数。如7和16。 (8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。等等。 三、什么是模指数运算? 指数运算谁都懂,不必说了,先说说模运算。模运算是整数运算,有一个整数m,以n为模做模运算,即m mod n。怎样做呢?让m去被n整除,只取所得的余数作为结果,就叫做模运算。例如,10mod3=1;26mod6=2;28mod2=0等等。

RSA加密算法(C实现)

RSA加密算法的编程实现 学号:0806580114 姓名:管睿 RSA算法是世界上第一个既能用于数据加密也能用于数字签名的非对称性加密算法。它易于理解和操作,所以流行甚广。算法的名字以发明者的名字命名,他们是:Ron Rivest,Adi Shamir 和Leonard Adleman。虽然RSA的安全性一直未能得到理论上的证实,但它经历了各种攻击,至今未被完全攻破。 在RSA算法中,先要获得两个不同的质数P和Q做为算法因子,再找出一个正整数E,使得E与 ( P - 1 ) * ( Q - 1 ) 的值互质,这个E就是私钥。找到一个整数D,使得( E * D ) mod ( ( P - 1 ) * ( Q - 1 ) ) = 1成立1[1],D就是公钥1。设N为P和Q的乘积,N则为公钥2。加密时先将文转换为一个或一组小于N的整数I,并计算I D mod N的值M,M就密文。解密时将密文M E mod N,也就是M的E次方再除以N所得的余数就是明文。 因为私钥E与( P - 1 ) * ( Q - 1 )互质,而公钥D使( E * D ) mod ( ( P - 1 ) * ( Q - 1 ) ) = 1成立。破解者可以得到D和N,如果想要得到E,必须得出( P - 1 ) * ( Q - 1 ),因而必须先对N进行因数分解。如果N很大那么因数分解就会非常困难,所以要提高加密强度P和Q的数值大小起着决定性的因素。一般来讲当P和Q都大于2128时,按照目前的机算机处理速度破解基本已经不大可能了。 RSA的安全性依赖于大数难于分解这一特点。公钥和私钥都是两个大素数(大于100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。 RSA 可用于数字签名,方案是用 ( a ) 式签名, ( b )式验证。具体操作时考虑到安全性和 m信息量较大等因素,一般是先作HASH 运算。RSA 的安全性。RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前,RSA的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解140多个十进制位的大素数。因此,模数n必须选大一些,因具体适用情况而定。 由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。*/ #include #include #include

用java编程实现RSA加密算法

用java编程实现RSA加密算法 RSA加密算法是目前应用最广泛的公钥加密算法,特别适用于通过Internet传送的数据,常用于数字签名和密钥交换。那么我今天就给大家介绍一下如何利用Java编程来实现RSA 加密算法。 一、RSA加密算法描述 RSA加密算法是1978年提出的。经过多年的分析和研究,在众多的公开密钥加密算法中,RSA加密算法最受推崇,它也被推荐为公开密钥数据加密标准。 由数论知识可知,若将一个具有大素数因子的合数进行分解是很困难的,或者说这个问题的计算量是令人望而生畏的,而RSA加密算法正是建立在这个基础上的。 在RSA加密算法中,—个用户A可根据以下步骤来选择密钥和进行密码转换: (1)随机的选取两个不同的大素数p和q(一般为100位以上的十进制数),予以保密;(2)计算n=p*q,作为用户A的模数,予以公开; (3)计算欧拉(Euler)函数z=(p-1)*(q-1),予以保密; (4)随机的选取d与z互质,作为A的公开密钥; (5)利用Euclid算法计算满足同余方程e*d≡1modz的解d,作为用户A的保密密钥;(6)任何向用户A发送信息M的用户,可以用A的公开模数D和公开密钥e根据C=Me mod n得到密文C;

RSA加密算法的安全性是基于大素数分解的困难性。攻击者可以分解已知的n,得到p和q,然后可得到z;最后用Euclid算法,由e和z得到d。然而要分解200位的数,需要大约40亿年。 二、用Java语言描述RSA加密算法的原理 假设我们需要将信息从机器A传到机器B,首先由机器B随机确定一个private_kcy(我们称之为密钥),可将这个private_key始终保存在机器B中而不发出来。然后,由这个private_key计算出public_key(我们称之为公钥)。这个public_key的特性是:几乎不可能通过该public_key计算生成它的priyate_key。接下来通过网络把这个public_key传给机器A,机器A收到public_key后,利用public_key将信息加密,并把加密后的信息通过网络发送到机器B,最后机器B利用已知的pri.rate_key,就可以解开加密信息。 步骤: (1)首先选择两个大素数p和q,计算n=p*q;m=(p-1)(q一1); (2)而后随机选择加密密钥public_key,要求和m互质(比如public_key=m-1);(3)利用Euclid算法计算解密密钥priyate_key,使private_key满足public_key*private_key—1(mod m),其中public_key,n是作为公钥已知,priVate_key 是密钥; (4)加密信息text时,利用公式secretWord=texI^Public_key (mod n)得到密文8ecretword; (5)解密时利用公式word=text^priVate_key(mod n)得到原文word=text。

RSA加密算法的研究与实现

RSA加密算法的研究与实现 摘要:在信息时代,如何保证信息的安全是个十分重要的问题。在多年的发展中,人们提出了许多不同类型的加密算法。其中RSA加密算法是公认的最经典的非对称密码算法之一。本文首先介绍了课题研究的背景和意义,再介绍了使用的研究工具,然后使用Verilog 硬件描述语言设计了一个RSA的加密系统,最后通过Modelsim进行了仿真测试。结果证明本文通过硬件实现的RSA加密算法可以有效的加密数据。 关键词:RSA;Verilog;Modelsim;硬件仿真; Abstract:In the information age, the security of information is a very important issue. In the years of development, people have proposed many different types of encryption algorithms. RSA encryption algorithm is one of the most classical asymmetric cryptographic algorithms. This paper first introduces the background and significance of the research, then introduces the research tools, then designs a RSA encryption system using Verilog hardware description language, and finally performs simulation tests through Modelsim. The result proves that the RSA encryption algorithm implemented in hardware can be effective and efficient. Keywords:RSA; Verilog; Modelsim; Hardware simulation;

RSA算法分析与编程实现

实验二 RSA算法 实验目的: 1.深入了解RSA加密算法的加密原理 2.通过编程模拟RSA算法的加密过程 实验内容: 一. RSA概述 ①RSA加密算法是一种最常用的非对称加密算法,CFCA在证书服务中离不了它。在公钥加密标准和电子商业中,RSA被广泛使用。 ②公钥和私钥 1. 随意选择两个大的质数p和q,p不等于q,计算N=pq。 2. 根据欧拉函数,不大于N且与N互质的整数个数为(p-1)(q-1) 3. 选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1) 4. 用以下这个公式计算d:d× e≡ 1 (mod (p-1)(q-1)) 5. 将p和q的记录销毁。 (N,e)是公钥,(N,d)是私钥。(N,d)是秘密的。Alice将她的公钥(N,e)传给Bob,而将她的私钥(N,d)藏起来。 二.RSA算法的编程实现 #include #include using namespace std; void main() { int p,q;//定义存放两个质数的变量 cout<<"请输入两个较大的素数:"<>p>>q; cout<<"p="<

int e,i; float d; cin>>e;//输入e值 for(i=1;;i++)//计算d值 { d=(float)(o*i+1)/e; if(d-(int)d==0) break; } cout<<"e="<>m1[j]; if(m1[j]==-1) break; m2[j]=pow(m1[j],e); m4[j]=m2[j]/n; m3[j]=m2[j]-m4[j]*n; } cout<<"密文为:"<

RSA加密算法实验报告

四川大学计算机学院、软件学院实验报告 学号: _姓名:专业:班级:第 13 周

实验内容(算法、程序、步骤和方法)一、简介 RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。 RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。 RSA 的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。人们已能分解多个十进制位的大素数。因此,模数n必须选大一些,因具体适用情况而定。 二、加密算法流程 密钥生成 首先要使用概率算法来验证随机产生的大的整数是否质数,这样的算法比较快而且可以消除掉大多数非质数。假如有一个数通过了这个测试的话,那么要使用一个精确的测试来保证它的确是一个质数。 除此之外这样找到的p和q还要满足一定的要求,首先它们不能太靠近,此外p-1或q-1的因子不能太小,否则的话N也可以被很快地分解。 此外寻找质数的算法不能给攻击者任何信息,这些质数是怎样找到的,尤其产生随机数的软件必须非常好。要求是随机和不可预测。这两个要求并不相同。一个随机过程可能可以产生一个不相关的数的系列,但假如有人能够预测出(或部分地预测出)这个系列的话,那么它就已经不可靠了。比如有一些非常好的随机数算法,但它们都已经被发表,因此它们不能被使用,因为假如一个攻击者可以猜出p和q一半的位的话,那么他们就已经可以轻而易举地推算出另一半。 此外密钥d必须足够大,1990年有人证明假如p大于q而小于2q(这是一个很经常的情况)而,那么从N和e可以很有效地推算出d。此外e = 2永远不应该被使用。 运算速度 由于进行的都是大数计算,使得RSA最快的情况也比DES慢上好几倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。RSA的速度比对应同样安全级别的对称密码算法要慢1000倍左右。

rsa加密算法_源代码_c__实现

RSA算法 #include #include #include

{ /* */ private: unsigned __int64 randSeed;/* */ public: RandNumber(unsigned __int64 s=0); unsigned __int64 Random(unsigned __int64 n); };/* */ RandNumber::RandNumber(unsigned __int64 s) { if(!s) { randSeed= (unsigned __int64)time(NULL); } else { randSeed=s; } }/* */ unsigned __int64 RandNumber::Random(unsigned __int64 n) { randSeed=multiplier * randSeed + adder; return randSeed % n; }static RandNumber g_Rnd;/* 模乘运算,返回值x=a*b mod n */ inline unsigned __int64 MulMod(unsigned __int64 a, unsigned __int64 b, unsigned __int64 n) { return a * b % n; }/* 模幂运算,返回值x=base^pow mod n */ unsigned __int64 PowMod(unsigned __int64 &base, unsigned __int64 &pow, unsigned __int64 &n) { unsigned __int64 a=base, b=pow, c=1; while(b) { while(!(b & 1)) { b>>=1; //a=a * a % n; //函数看起来可以处理64位的整数,但由于这里a*a在a>=2^32时已经造成了溢出,因此实际处理范围没有64位 a=MulMod(a, a, n); } b--; //c=a * c % n; //这里也会溢出,若把64位整数拆为

RSA加密算法1

Unicode(统一码、万国码、单一码、标准万国码) 1.隨意選擇兩個大的質數p和q,p不等於q,計算N=pq。 2.根據歐拉函數,不大於N且與N互質的整數個數為(p-1)(q-1) 3.選擇一個整數e與(p-1)(q-1)互質,並且e小於(p-1)(q-1) 4.用以下這個公式計算d:d× e≡ 1 (mod (p-1)(q-1)) 5.將p和q的記錄銷毀。

(N,e)是公鑰,(N,d)是私鑰。(N,d)是秘密的。Alice將她的公鑰(N,e)傳給Bob,而將她的私鑰(N,d)藏起來。 加密消息 假设Bob想给Alice送一个消息m,他知道Alice产生的N和e。他使用起先与Alice 约好的格式将m转换为一个小于N的整数n,比如他可以将每一个字转换为这个字的Unicode码,然后将这些数字连在一起组成一个数字。假如他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为n。用下面这个公式他可以将n加密为c: 计算c并不复杂。Bob算出c后就可以将它传递给Alice。 解密消息 Alice得到Bob的消息c后就可以利用她的密钥d来解码。她可以用以下这个公式来将c转换为n: 得到n后,她可以将原来的信息m重新复原。 解码的原理是 以及ed≡ 1 (mod p-1)和ed≡ 1 (mod q-1)。由费马小定理可证明(因为p和q是质数) 和 这说明(因为p和q是不同的质数,所以p和q互质) 签名消息

RSA也可以用来为一个消息署名。假如甲想给乙传递一个署名的消息的话,那么她可以为她的消息计算一个散列值(Message diget),然后用她的密钥(private key)加密这个散列值并将这个“署名”加在消息的后面。这个消息只有用她的公钥才能被解密。乙获得这个消息后可以用甲的公钥解密这个散列值,然后将这个数据与他自己为这个消息计算的散列值相比较。假如两者相符的话,那么他就可以知道发信人持有甲的密钥,以及这个消息在传播路径上没有被篡改过。 安全 假设偷听者乙获得了甲的公钥N和e以及丙的加密消息c,但她无法直接获得甲的密钥d。要获得d,最简单的方法是将N分解为p和q,这样她可以得到同余方程d× e≡ 1 (mod (p-1)(q-1))并解出d,然后代入解密公式 导出n(破密)。但至今为止还没有人找到一个多項式時間的算法来分解一个大的整数的因子,同时也还没有人能够证明这种算法不存在(见因数分解)。 至今为止也没有人能够证明对N进行因数分解是唯一的从c导出n的方法,但今天还没有找到比它更简单的方法。(至少没有公开的方法。) 因此今天一般认为只要N足够大,那么駭客就没有办法了。 假如N的长度小于或等于256位,那么用一台个人电脑在几个小时内就可以分解它的因子了。1999年,数百台电脑合作分解了一个512位长的N。今天对N的要求是它至少要1024位长。 1994年彼得·秀爾(Peter Shor)证明一台量子计算机可以在多項式時間内进行因数分解。假如量子计算机有朝一日可以成为一种可行的技术的话,那么秀爾的算法可以淘汰RSA和相关的衍生算法。(即依赖于分解大整数困难性的加密算法) 假如有人能够找到一种有效的分解大整数的算法的话,或者假如量子计算机可行的话,那么在解密和制造更长的钥匙之间就会展开一场竞争。但从原理上来说RSA在这种情况下是不可靠的。 实现细节 密钥生成 首先要使用概率算法来验证随机产生的大的整数是否質数,这样的算法比较快而且可以消除掉大多数非質数。假如有一个数通过了这个测试的话,那么要使用一个精确的测试来保证它的确是一个質数。

基于rsa加密算法本科论文

桂林理工大学 GUILIN UNIVERSITY OF TECHNOLOGY 本科毕业设计(论文) 题目:数据通信中的RSA加密算法的设计与实现

摘要 数据通信是依照一定的通信协议,利用数据传输技术在两个终端之间传递数据信息的一种通信方式和通信业务。随着数据通信的迅速发展而带来了数据失密问题。信息被非法截取和数据库资料被窃的事例经常发生,在日常生活中信用卡密码被盗是常见的例子。所以数据加密成为十分重要的问题,它能保证数据的安全性和不可篡改性。RSA加密算法以它难以破译的优点,被广泛的使用在电子商务和VPN中。 本文针对非对称性加密RSA算法,采用软件Visual C++6.0进行程序编写。根据模乘法运算和模指数运算的数学原理所编写的程序在进行测试后,能够通过输入两个素数进行运算从而实现明文与密文之间的转换,然后通过对公钥和私钥的管理,对所传输的数据进行保护,让数据只能由发送者和接收者阅读,以达到数据通信中数据无法被他人破译的目的。 关键词:RSA算法,数据通信,加密, 解密。

Data communication of the RSA encryption algorithm in the Design and Implementation Teacher:Chen Fei student:Lu Hui Abstract Data communications in accordance with certain communication protocols, the use of data transmission technology in the transmission of data between two terminals as a means of communication of information and communication business. With the rapid development of data communications and has brought the issue of data compromise. Unlawful interception of information and database information on frequent instances of theft, credit card in their daily lives stolen passwords is a common example. Therefore, data encryption has become a very important issue, it can ensure data security and can not be tamper with nature. RSA encryption algorithm to the merits of it difficult to decipher, was widely used in the e-commerce and VPN. In this paper, asymmetric RSA encryption algorithm, the use of software for Visual C + +6.0 programming. According to Die multiplication and modular exponentiation by the mathematical principles in the preparation of test procedures can be adopted for the importation of two prime numbers and computing in order to achieve explicit conversion between the ciphertext, and then through a public key and private key management, for the transmission of data protection, so that data can only be made by the sender and the recipient to read, in order to achieve data communications data can not be the purpose of deciphering the others. Keywords: RSA algorithms, data communication, encryption, decryption.

相关主题
相关文档
最新文档