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=[]n
因此,
- [z^(de)]n=[z^(kt+)]n=[z^(kt)*z]n=[z^kt]n*[z]n= [z]n 因为[z^k]n = []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加密算法的加密与解密的更多相关文章
- C#使用RSA证书文件加密和解密示例
修改MSDN上的示例,使之可以通过RSA证书文件加密和解密,中间遇到一个小问题. Q:执行ExportParameters()方法时,回报CryptographicException:该项不适于在指定 ...
- RSA 加密算法 Java 公钥加密私钥解密 和 私钥加密公钥解密 的特点
package com.smt.cipher.unsymmetry; import org.apache.commons.codec.binary.Base64; import org.apache. ...
- Angular+Ionic+RSA实现后端加密前端解密功能
因业务需要,需要给android应用安装证书,通过读取证书文件内容实现某些功能的控制: 流程:后台通过publicKey对指定内容的文件进行加密,生成文件共客户下载,客户下载后选择该证书文件读取到应用 ...
- RSA算法 JS加密 JAVA解密
有这样一个需求,前端登录的usernamepassword,password必需加密.但不可使用MD5,由于后台要检測password的复杂度,那么在保证安全的前提下将password传到后台呢,答案 ...
- RSA生成、加密、解密、签名。
首先,要会生成RSA密码对. https://app.alipay.com/market/document.htm?name=saomazhifu#page-23 (事例中的密钥对好像有问题,最 ...
- 使用PHP实现RSA算法的加密和解密
本文提供使用RSA算法加密解密数据的PHP程序类(签名和验签的实现方式可以查看使用PHP实现RSA算法的签名和验签 这篇文章),封装了格式化公钥和私钥文件的方法,这样无论使用什么格式的公钥或者私钥都可 ...
- JAVA的对称加密算法AES——加密和解密
出自: http://blog.csdn.net/hongtashan11/article/details/6599645 http://www.cnblogs.com/liunanjava/p/42 ...
- RSA非对称性前端加密后端解密
前端加密代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ...
- C#使用RSA证书文件加密和解密
public class EncrypHelp { static public byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters RSAKey ...
随机推荐
- JS第二天简单总结
布尔型变量:true,flase 广泛用于真假的逻辑判断 对象:分类,对象是由一些彼此相关的属性和方法集合在一起而构成的一个数据实体: 例如,var today = new Date();中,Date ...
- 有关attribute和property,以及各自对select中option的影响
这个问题老生常谈,但是直到现在我依旧时常会把它搞混.下面列一些各自的特性. attribute property 设置方法 option.setAttribute('selected', true ...
- AXUre
[ Javascript ] 一.javascript能用来干什么? 1.数据的验证. 2.对动态这本写到网页当中. 3.可以对事件做出响应. 4.可以读写html 中的内室. 5.可以检测浏览器 6 ...
- SQLHelper
今天学习了.net后,经过老师的一番讲解,似乎对它越来越渴望了,希望自己在接下来的学习当中,能很好的驾驭.net,加油吧, 下面我分享一个操作SQL数据库的代码大全,谢谢观赏.嘿嘿,还是比较长的哦, ...
- Myeclipse+AJAX+Servlet
最近刚开始学AJAX的知识,这里介绍一个简单的Myeclipse+AJAX+Servlet项目. 此项目包含3个文件:index.jsp.check.java.还有一个需要配置的文件是:web.xml ...
- app的自动更新(调用DownloadManager)
具体思路为:调用接口与服务器版本对比,当服务器版本号大于本地的,调用DownloadManager进行下载,之前也试过很多方法,但是兼容性都不是很好,还有一点要注意的是,在这里我并没有设置固定的下载路 ...
- 【LeetCode OJ】Maximum Depth of Binary Tree
Problem Link: https://oj.leetcode.com/problems/maximum-depth-of-binary-tree/ Simply BFS from root an ...
- HP T505恢复出厂系统
1.制作usb启动U盘. ------ 从HP网站上下载,或者找供应商提供 2.按F11,从U盘启动进去,会自动执行安装,等待完成即可以.
- C/C++代码覆盖率生成
初始状态下只有一个源代码文件 nosoul@linux:testCov> ls test.c nosoul@linux:testCov> 第一步:编译.链接.执行可执行文件 gcc -o ...
- jquery省市联动,根据公司需求而写
//author:guan //2015-05-25 //省市联动 //实用说明,页面引用如下js //<script src="../js/jquery-1.6.3.min.js&q ...