RSA加密算法的加密与解密

摘要:
转发原文链接:RSA加密算法加密解密过程分析1、加密算法概述加密算法根据内容是否可以还原,可以分为可逆加密和不可逆加密。可逆加密根据是否使用同一密钥进行加密和解密,可分为对称加密和非对称加密。对称加密是指在加密和解密时使用相同的密钥:举个简单的例子,一个字符串C被简单地加密,每个字符与a进行异或,形成密文S。这

转发原文链接: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以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。 

免责声明:文章转载自《RSA加密算法的加密与解密》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PostgreSQL常用初级技能树Python之Scrapy安装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

RSA密钥生成与使用

RSA密钥生成与使用 1. 打开openssl密钥生成软件打开 openssl 文件夹下的 bin 文件夹,执行 openssl.exe 文件,如下图:   2. 生成RSA私钥   输入“genrsa -out rsa_private_key.pem 1024”命令,回车后,在当前 bin 文件目 录中会新增一个rsa_private_key.pem ...

单点登陆 ---密钥

一、需求描述 现在有A系统和B系统,需要在A系统进行单点登陆到B系统。 二、B系统要做事 1、提供一个可以让A系统登陆的网址 http://localhost:8083/Account/SingleSignOn/?u=xxx&token=FB92B341DBDB59D7 其中,u为加密后的用户名,token为B系统与A系统单点登录握手密钥 2、控制...

web前端常见的加密算法介绍

在信息安全越来越受重视的今天,前端的各种加密也变得更加重要。通常跟服务器的交互中,为保障数据传输的安全性,避免被人抓包篡改数据,除了 https 的应用,还需要对传输数据进行加解密。 目前常见的加密算法可以分成三类 对称加密算法:AES、... 非对称加密算法:RSA、... Hash 算法:MD5、... 对称加密算法 对称加密(也叫私钥加密)指加密...

OS + Linux sshkeygen / sshcopyid / id_rsa / id_rsa.pub / authorized_keys

s Ansible自动部署lnmp架构+上线电商 https://www.cnblogs.com/Zrecret/p/12072289.html ssh-keygen和ssh-copy-id实现免密登录远程主机 https://blog.csdn.net/feinifi/article/details/78213297 Linux上用ssh-keygen和...

向 Git 服务器添加 SSH 公钥

在网上很少找到文章有提到如何将自己的 Git 远程仓库配置成可以通过 SSH 公钥方式认证的,而几乎清一色都是告诉你怎么通过 web 界面向 GitHub 添加 SSH 公钥。LZ 在网上查找了一番,终于找到了办法。 对于不想看 LZ 下面罗嗦了一大堆的园友,LZ 先把结论放在这里,直接拿去用就是了。 把本地用户的 ~/.ssh/id_rsa.pub 的内...

Nginx使用Lua脚本加解密RSA字符串

本文主要介绍使用Lua脚本对采用RSA加密后的字符串进行解密的过程。 使用第三方类库lua-resty-rsa,参考地址:https://github.com/spacewander/lua-resty-rsa 下载并安装第三方依赖库 # Redis集群连接库依赖RSA加解密第三方依赖库[lua-resty-rsa],因此需要提前安装此第三方依赖库 #...