记得在我上初一的时候做过这么一道数学竞赛题,就是求7的222次方的个位数字。当时教材上介绍的解题方法是将222分解成4*55+2,然后算出7的2次方个个位数字即为要算的数值。当时年幼无知的我根本不了解整个过程为什么要这么计算,只知道根据规律也可以得出响应的结果,然后后来才知道这个里面蕴含着一个非常重要的定理。

欧拉定理:若n,a为正整数,且n,a互质,如果算出不大于n且与n互质的正整数个数φ(n),那么a的φ(n)次方除于n的余数为1.

用公式表明即为:

以3和5两个数为例,假设a=3,n=5,那么不大于5且与5互质的数有1,2,3,4四个数字,那么φ(n)=4,根据公式就可以得出来3的4次方81除于5余数是1.

再回到上题7的222次方的个位数字,其实这道题也就算要计算7的222次方除以10的余数。因为7和10是互质数且φ(10)=4,那么根据欧拉定理便有7的4次方(2401)除以10余数是1。当然无论多少个个位数为1的数相乘其个位数字仍然是1,所以整个题目就转变成算7的二次方了结果是9.

以上所讲的只是笔者曾经做过的一个无关痛痒的数学竞赛题,但是如今这个思想却成了目前地球上最重要的加密算法的基础。目前常用的加密算法主要分为对称加密和非对称加密两种。对称加密就是加密和解密密钥完全一样,这样以来加密解密过程简单而效率高,不过由于传输当中需要把密钥一并传输而是的安全性能下降;而非对称加密则是加密密钥和解密密钥彼此独立,这样使得安全性大大增加,而典型的非对称加密算法便是RSA算法。

RSA算法的基本步骤可以分为以下几步:(以假设A和B通信为例子)

1,A首先选择两个质数,假设这里选择,61和53,实际选择的质数都相当大

2,将两个数相乘得到3233,然后计算出不大于3233且和3233互质的数,根据欧拉函数的定义可以算出是φ(3233)=(61-1)*(53-1)=3120

3,寻找一个不大于3120的质数e,这里选择e=17,然后计算摸反元素,也就是计算一个整数d,是的e和d相乘的数除以3120余数为1。由于e=17,所以这一步可以写出以下等式:17*d = 3120k+1.由于K的值我们不关心,所以也可以写成17d+3120k=1.于是通过解这个二元一次不定方程就可以算出d来。通过辗转相除法计算出一组解为(2753,-15).此时加密公钥为(3233,17),私钥为(3233,2753).

4,真正个通信此时开始,假设A要把信息65发给B,实际上首先计算下式中的C:6517 ≡ C(mod 3233),这里计算出的C=2790。然后A将2790发给B

5,当B收到2790后解密,解密实际上就是计算下面的C:27902753 ≡ C (mod 3233),当然算出来就是65.此时加密解密的过程就结束了。

通过以上算法可以看出来,如果想破解RSA必须要根据公钥计算出私钥,要想通过3233和17计算出2753必须要首先得到φ(3233),当然直接去暴力计算φ(3233)必须首先找出来61和53这两个数字。不过可惜的是大数分解目前而言没有相对良好的算法,将一个四位数分解很容易,但是对于一个四十位数恐怕就不是那么容易了,真正强行计算首先还要实现大数相乘算法,两个很大的数相乘所耗费的时间远远不是一条imul指令可以完成的。

当然超级计算机和量子计算机的问世将会对RSA算法的可靠性产生极大威胁,但是随着计算机计算速度的不断提高RSA算法的密钥长度也会不断增长,其破解难度恐怕也会不断增加,但谁能笑到最后还是得等时间的答复。今天就只简单写了下RSA算法的基本原理和步骤,回头再写数学基础以及证明。

RSA算法的基本原理的更多相关文章

  1. 【转】基于RSA算法实现软件注册码原理初讨

    1 前言 目前,商用软件和共享软件绝大部份都是采用注册码授权的方式来保证软件本身不被盗用,以保证自身的利益.尽管很多常用的许多软件系统的某些版本已经被别人破解,但对于软件特殊行业而言,注册码授权的方式 ...

  2. 一个基于RSA算法的Java数字签名例子

    原文地址:一个基于RSA算法的Java数字签名例子 一.前言: 网络数据安全包括数据的本身的安全性.数据的完整性(防止篡改).数据来源的不可否认性等要素.对数据采用加密算法加密可以保证数据本身的安全性 ...

  3. 信息安全-5:RSA算法详解(已编程实现)[原创]

    转发注明出处:http://www.cnblogs.com/0zcl/p/6120389.html 背景介绍 1976年以前,所有的加密方法都是同一种模式: (1)甲方选择某一种加密规则,对信息进行加 ...

  4. RSA算法原理

    一直以来对linux中的ssh认证.SSL.TLS这些安全认证似懂非懂的.看到阮一峰博客中对RSA算法的原理做了非常详细的解释,看完之后茅塞顿开,关于RSA的相关文章如下 RSA算法原理(一) RSA ...

  5. C#RSA算法实现+如何将公钥为XML格式转为PEM格式,给object-C使用

    .net中,处于安全的考虑,RSACryptoServiceProvider类,解密时只有同时拥有公钥和私钥才可以.原因是公钥是公开的,会被多人持有.这样的数据传输是不安全的.C#RSA私钥加密,公钥 ...

  6. [已解决] 快速理解RSA算法

    RSA算法基础详解 http://www.cnblogs.com/hykun/p/RSA.html RSA算法原理(一) http://www.ruanyifeng.com/blog/2013/06/ ...

  7. 公钥私钥和RSA算法

    1, RSA算法原理(一) http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html 2, RSA算法原理(二) http: ...

  8. 跨越千年的RSA算法

    转载自http://www.matrix67.com/blog/archives/5100 数论,数学中的皇冠,最纯粹的数学.早在古希腊时代,人们就开始痴迷地研究数字,沉浸于这个几乎没有任何实用价值的 ...

  9. (转)RSA算法原理(二)

      作者: 阮一峰 日期: 2013年7月 4日 上一次,我介绍了一些数论知识. 有了这些知识,我们就可以看懂RSA算法.这是目前地球上最重要的加密算法. 六.密钥生成的步骤 我们通过一个例子,来理解 ...

随机推荐

  1. python array基本操作一

    一.排序 a = [2,3,4,1] b = np.argsort(a) # out:[3 0 1 2] # 输出:是一个数组,是按元素递增顺序的索引 二.查找 1.最大值及其索引 b = max(a ...

  2. SQLServer 安装失败可能的原因

    问题:安装的时候显示参数指定的目录无效 解决:你的安装盘使用了文件/文件夹压缩功能,去掉压缩属性即可! 建议不要轻易使用储存盘的压缩功能

  3. C++中的指针(*)、引用(&)、const详解(一、定义变量)

    一.前言 本人作为一个工作了5年的程序员,程序生涯最初是从c/c++开始的,但是始终不能很熟悉的理解c语言中的指针和c++中的引用,归其原因,一部分自己没有静下心来思考,一部分原因是其自身的复杂性. ...

  4. 事务和JDBC事务隔离级别

    与事务相关的理论 mysql事物隔离级别:http://mj4d.iteye.com/blog/1744276 事务(Transaction): 是并发控制的单元,是用户定义的一个操作序列.这些操作要 ...

  5. Mybatis 使用Mapper接口的Sql动态代码方式进行CURD和分页查询

    1.Maven的pom.xml 2.配置文件 2.1.db.properties 2.2.mybatis.xml 2.3.log4j.xml 3.MybatisUtil工具类 4.Mapper映射文件 ...

  6. K8S之WebApi部署

    转载声明 本文转自:ASP.NET Core on K8S学习初探(3)部署API到K8S 1.下载镜像 docker pull edisonsaonian/k8s-demo 因为是测试流程,直接把文 ...

  7. Windows start

    启动一个单独的窗口以运行指定的程序或命令. START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]   ...

  8. PHP正则使用技巧1

    $pattern="/<div class=\"cover g-playicon\">(.*?)>/s"; 意思为抓取<div clas ...

  9. kubernetes监控和性能分析工具:heapster+influxdb+grafana

    1.部署heapster 下载 heapster 相关 yaml 文件 [root@master dashboard]# wget https://raw.githubusercontent.com/ ...

  10. 跨域问题The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by t

    withCredentials 属性 上面说到,CORS请求默认不发送Cookie和HTTP认证信息.如果要把Cookie发到服务器,一方面要服务器同意,指定Access-Control-Allow- ...