RSA加密算法的加密与解密

转发原文链接:RSA加密算法加密与解密过程解析

1.加密算法概述

  加密算法根据内容是否可以还原分为可逆加密和非可逆加密。

  可逆加密根据其加密解密是否使用的同一个密钥而可以分为对称加密和非对称加密。

  所谓对称加密即是指在加密和解密时使用的是同一个密钥:举个简单的例子,对一个字符串C做简单的加密处理,对于每个字符都和A做异或,形成密文S。解密的时候再用密文S和密钥A做异或,还原为原来的字符串C。这种加密方式有一个很大的缺点就是不安全,因为一旦加密用的密钥泄露了之后,就可以用这个密钥破解其他所有的密文。

  非对称加密在加密和解密过程中使用不同的密钥,即公钥和私钥。公钥用于加密,所有人都可见,私钥用于解密,只有解密者持有。就算在一次加密过程中原文和密文发生泄漏,破解者在知道原文、密文和公钥的情况下无法推理出私钥,很大程度上保证了数据的安全性。

  此处,我们介绍一种非常具有代表性的非对称加密算法,RSA加密算法。RSA算法是1977年发明的,全称是RSA Public Key System,这个Public Key就是指的公共密钥。

 2.密钥的计算获取过程 

  密钥的计算过程为:首先选择两个质数p和q,令n=p*q。

  令k=?(n)=(p−1)(q−1),原理见4的分析

  选择任意整数d,保证其与k互质

  取整数e,使得[de]k=[1]k。也就是说de=kt+1,t为某一整数。

3.RSA加密算法的使用过程

  同样以一个字符串来进行举例,例如要对字符串the art of programming进行加密,RSA算法会提供两个公钥e和n,其值为两个正整数,解密方持有一个私钥d,然后开始加密解密过程过程。

1.      首先根据一定的规整将字符串转换为正整数z,例如对应为0到36,转化后形成了一个整数序列。

2.      对于每个字符对应的正整数映射值z,计算其加密值M=(N^e)%n. 其中N^e表示N的e次方。

3.      解密方收到密文后开始解密,计算解密后的值为(M^d)%n,可在此得到正整数z。

4.      根据开始设定的公共转化规则,即可将z转化为对应的字符,获得明文。

4.RSA加密算法原理解析

  下面分析其内在的数学原理,说到RSA加密算法就不得不说到欧拉定理。

欧拉定理(Euler’s theorem)是欧拉在证明费马小定理的过程中,发现的一个适用性更广的定理。
首先定义一个函数,叫做欧拉Phi函数,即?(n),其中,n是一个正整数。
?(n)=总数(从1到n−1,与n互质整数)
比如5,那么1,2,3,4,都与5互质。与5互质的数有4个。?(5)=4
再比如6,与1,5互质,与2,3,4并不互质。因此,?(6)=2
对于一个质数p来说,它和1, 2, 3, …, p – 1都互质,所以?(p)=p−1。比如?(7)=6,?(11)=10

  欧拉定理叙述如下:
  欧拉定理:如果n是一个正整数,a是任意一个非0整数,且n和a互质。那么,a^?(n)−1可以被n整除。

  推论1:如果m和n是互质的正整数。那么,?(mn)=?(m)?(n)

  推论2:[ab]n=[[a]n[b]n]n

  证明:假设a和b除以n的余数为c1,c2。a和b可以写成a=nt1+c1,b=nt2+c2。那么,ab=n2t1t2+nt1c2+nt2c1+c1c2。因此ab除以n的余数为c1c2。即[ab]n=[a]n[b]n。

有以上定理后,由此可以推导出RSA算法的内在原理

  根据欧拉定理,对于任意z,如果z与n互质,那么:

[z^?(n)]n=[z^k]n=[1]n

  因此,

[z^(de)]n=[z^(kt+1)]n=[z^(kt)*z]n=[z^kt]n*[z]n= [z]n   因为[z^k]n = [1]n

  上面主要使用了de=kt+1以及推论2。也就是说:

[z^(de)]n=[z]n

  根据2的推论,有

([z^e]n)^d=[z]n

  即d个余数相乘,因为其乘积可能大于n,所以由[ab]n=[[a]n[b]n]n,例如令a和b都为5,n为3,可知该结论

  故上式可描述为[([z^e]n)^d]n=[z]n=z,就是原数字乘方求余数,然后再乘方求余数后得到原来数字的过程,得证。

  公开的加密方式,私有的解密方式。RSA安全的关键在于很难对一个大的整数进行因子分解。

5.RSA加密的缺点

  1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
  2)安全性,RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,而且密码学界多数人士倾向于因子分解不是NP问题。

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

时间: 2024-10-10 08:35:18

RSA加密算法的加密与解密的相关文章

C#使用RSA证书文件加密和解密示例

原文:C#使用RSA证书文件加密和解密示例 修改MSDN上的示例,使之可以通过RSA证书文件加密和解密,中间遇到一个小问题. Q:执行ExportParameters()方法时,回报CryptographicException:该项不适于在指定状态下使用(Key not valid for use in specified state). A:导入带有私钥的证书时,需要使用"X509KeyStorageFlags"参数标记"私钥可导出". X509Certifica

RSA算法 JS加密 JAVA解密

有这样一个需求,前端登录的用户名密码,密码必需加密,但不可使用MD5,因为后台要检测密码的复杂度,那么在保证安全的前提下将密码传到后台呢,答案就是使用RSA非对称加密算法解决 . java代码 需要依赖 commons-codec 包 RSACoder.java import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import java.security.*; import java.securit

python中的RSA加密与解密

什么是RSA: RSA公开密钥密码体制.所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制. 在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的.加密算法E和解密算法D也都是公开的.虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK. 正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存:另一个为公开

linux网络数据传输的加密,解密以及基于openssl的私有CA的建立

网络数据传输的安全性是计算机通信领域的重要课题,数据加密就是保证数据安全性的主要方法.所谓数据加密,即是通过某种算法和秘钥对数据明文进行处理,从而得到密文的过程.计算机网络通信过程中的加密形式主要有以下几种: 1,对称加密,用同一个密钥对信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密.对称加密算法的优点是算法公开.计算量小.加密速度快.加密效率高,但秘钥有时会很多,难以管理.而且秘钥交换又是一个难以解决的问题. 常见算法: DES:Data Encryption Standard,

[Java 安全]加密、解密与数字签名

引言 本文使用的密码学术语请见术语章节. Base64编码 算法简述 定义 Base64内容传送编码是一种以任意8位字节序列组合的描述形式,这种形式不易被人直接识别. Base64是一种很常见的编码规范,其作用是将二进制序列转换为人类可读的ASCII字符序列,常用在需用通过文本协议(比如HTTP和SMTP)来传输二进制数据的情况下.Base64并不是加密解密算法,尽管我们有时也听到使用Base64来加密解密的说法,但这里所说的加密与解密实际是指编码(encode)和解码(decode)的过程,其

数据的加密和解密初识

数据的加密和解密 加密是让数据从明文变成密文,传输过程中是密文,传送过去之后对方接收到的也是密文. 可以理解为密文就是乱码,看不出内在的任何意义,通常也都是逐位对应的. 在接收方接收到密文之后只有把它还原为原来的样子才可以理解对方说的具体是什么,此过程就叫做解密. 1.不同主机之间的进程间通信:Socket-pair,套接字对 套接字Socket的三种类型: 流套接字(Socket_Stream):基于TCP协议通信的套接字 数据报套接字(Socket_Dgram):基于UDP协议通信的套接字

加密与解密

安全与服务: 数据的加密和解密: OpenSSL(TLS):ssl基本被淘汰,TLS取而代之 openssh:dropbear软件 DNS:BIND软件,功能强大,伯克利的 web server:网站服务,最重要的,工作重点 应用程序:httpd(ASF:apach软件基金会维护) engine x(Nginx):引擎,web服务平台,第二,仅次于apach --tengine  (淘宝二次开发产品) --openresty(二次开发产品) web archive(平台架构方式) LAMP:li

系统安全之数据的加密和解密、CA的介绍、SSL或TLS协议简介及握手过程

网络通信需要安全                所谓的网络通信就是进程与进程之间的通信                        然而进程的通信一般可以分成两类:1.同一主机之间的进程通信                                                                              2.不同主机之间的进程通信                                                              

利用ASP.NET加密和解密Web.config中连接字符串

介绍 这篇文章我将介绍如何利用ASP.NET来加密和解密Web.config中连接字符串 背景描述 在以前的博客中,我写了许多关于介绍 Asp.net, Gridview, SQL Server, Ajax, JavaScript等的文章.大多数情况下,我都把数据库的连接字符串放在了web.config中.其中包含许多敏感信息,包括连接数据库的用户名密码等.然而我们在web.config和machine.config中以纯文本的方式保存密码安全吗? 如果我们的程序只是部署在内部服务器中,这应该没