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加密算法加密与解密过程解析相关推荐

  1. 记录一次寻4399加密信息解密过程

    记录一次寻4399加密信息解密过程 一.前提须知 在4399页面中,登录面板中输入了用户名和密码(随便输入,只是拿来试试解密),输入的用户名是:test ,密码:23232323: 4399网站采用的 ...

  2. RSA前端加密后端解密

    前面说过接口数据在后端如何使用RSA加解密 这里遇到了使用RSA前端加密后端解密的需求. 实现方式如下: 1.后端的RSA工具 package com.ieslab.interactivequery. ...

  3. RSA非对称加密和解密(同时生成密钥)

    RSA非对称加密和解密(同时生成密钥) 准备jar包 bcprov-jdk16-1.46.jar commons-codec-1.15.jar 获取jar地址:https://mvnrepositor ...

  4. DES和RSA混合加密及解密-JAVA

    DES和RSA混合加密及解密 实际开发过程中,RSA生成的公钥应保存在加密方,私钥应保存在解密方,可使用读取文件内容方式获取密钥. maven依赖: <!-- DES --><dep ...

  5. mcrypt php 加密解密,mcrypt启用 加密以及解密过程详细解析

    Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以密文还原. 1.PHP加密扩展库Mcrypt安装在标准的PHP安装过程中并没有把Mrcypt安装上,但PHP的主目录下包含了libmc ...

  6. 【加密算法 AES256】AES256加密和解密过程

    AES是一种对称加密算法,对称指加密和解密使用同一个密钥: 256指密钥的长度是256bit,即32个英文字符的长度:密钥的长度决定了AES加密的轮数 # -*- coding: utf-8 -*-f ...

  7. https原理:证书传递、验证和数据加密、解密过程解析 (转)

    http://www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html 我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站 ...

  8. Java实现HTTPS加密、解密过程

    1.HTTPS握手过程模拟 以下文章来自:http://kingj.iteye.com/blog/2103662 1.1准备工作 1.创建java证书: C:\> keytool -genkey ...

  9. php signature解密,openssl RSA非对称加密、解密、签名、验签

    需要先了解的openssl系列函数 openssl_pkey_get_private 从证书中解析获取私钥,以供使用.成功,返回真实的密钥资源标识符(Resource ID),否则返回false op ...

最新文章

  1. 知乎热议20年科研怪状:为何论文创新性越强越难发表,跟风修修补补反而更容易发?...
  2. springboot怎么写上传头像接口?
  3. 九章算法【总结】Java 搞定链表-面试常考题目精选
  4. MongoDB用户授权和管理
  5. 提高语音识别成功率的解决方案思路一
  6. java jtable行标题_如何设置JTable的标题——如图
  7. ThreadLocal线程复用导致的安全问题
  8. 如何在 Flutter 中使 Expanded 中的文本可滚动
  9. 一位从业20年的程序员分享积累的20条编程经验
  10. Asp .Net Mvc在DeBug模式下设置自定义IP
  11. python之udp
  12. marlab中主成分得分怎么求_成考数学不可触碰的雷区和得分技巧(纯干货)
  13. 创业感悟:有舍才会得,舍得才见风景
  14. PDF页面太大要如何才能缩小?
  15. vm-install vmware tools安装
  16. 超级好用的7个程序员笔记软件,你最常用的是哪个?
  17. shell之系统命令基础
  18. esp32c3 crash分析
  19. UnityWebRequest断点下载文件
  20. 给所有想辞职的人一个大胆的建议!

热门文章

  1. 数据结构之二分查找OJ(上)
  2. 算法篇-2-分治思想-棋盘覆盖归并排序Strasssen矩阵乘法循环赛安排
  3. 类与对象(一)----什么是类和对象
  4. MYSQL复制表结构及数据到新表
  5. 数据库的设计步骤(好文)
  6. anaconda中的python3环境与ros公用时的问题
  7. java监测服务器信息(cpu,内存,运行时间等),springboot监控服务器信息
  8. 后端提示无法加载响应数据可能原因
  9. 利用vlan交换机(网管交换机)打trunk实现单线复用
  10. vim 安装插件及常用插件