RSA加密算法的初步学习,以及简单使用。
Posted dousil
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RSA加密算法的初步学习,以及简单使用。相关的知识,希望对你有一定的参考价值。
真心的感谢作者的幸苦劳动,给我们带来这么好的文章:本文参考地址:https://blog.csdn.net/u014066037/article/details/51314820
RSA是一个比较完善的公开的完善的密钥算法,他技能用于加密,也能用与数字签名。这个算法经过多年的深入密码研究,虽然密码分析者,既不能证明也不能否认RSA的安全性。但这恰恰证明该算法有一定的可信度。目前他已经成为最流行的公开密钥算法。
RSA的安全基于大数分解的难度,其公钥和私钥是一对大素数的函数,从一个公钥和密文恢复除明文的难度,相当于两个大素数之积。
RSA的公钥、私钥的组成,以及加密和解密算法公式可以见如下表:
可能好久没哟接触数学了,看到这些公式不免一头雾水,别急,在没有正式讲解RSA加密算法之前,让我们复习一下几个基本概念,然后在后边介绍他中的用途。
一 :什么是素数
素数是这样的数,他除了可以表示自己和1的乘积之外,不能表示任何其他的两个整数的乘积。例如15 = 3* 5 。15不是素数。13 是素数。素数也称之为质数。
二:什么是互素数,什么叫互质数
小学教材是这样对互质数定义的,公约数为1的两个数,叫做互质数。这里说的两个数是指的互质数。
(1)两个质数一定是互质数。例如,2与7、13与19。
(2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与26。
(3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。
(4)相邻的两个自然数是互质数。如15与16。
(5)相邻的两个奇数是互质数。如49与51。
(6)大数是质数的两个数是互质数。如97与88。
(7)小数是质数,大数不是小数的倍数的两个数是互质数。如7和16。
(8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。等等。
三:什么是模指数运算。
指数运算谁都懂,什么叫模运算,m mod n的含义让m去除以n只取取得的余数作为结果,这叫做模运算。例如10 mod 3 =1;28 mod 2 =0;莫指数运算是先做指数运算在做模运算。如53 mod 7=125 mod 7=6
四: 正式开始RSA算法
1.先去一对足够大的素数,p,q
2..计算n = p*q;
3. 计算f(n)= (p-1)(q-1); 同时对p和q严格保密,不让任何人知道。
4 找一个与f(n)互质的数e 并e(1,f(n));
5. 计算d,使得de≡1mod f(n)。这个公式也可以表达为d≡e-1 mod f(n)
这里要解释一下,≡是数论中表示同余的符号。公式中,≡符号的左边必须和符号右边同余,也就是两边模运算结果相同。显而易见,不管f(n)取什么值,符号右边1 mod f(n)的结果都等于1;符号的左边d与e的乘积做模运算后的结果也必须等于1。这就需要计算出d的值,让这个同余等式能够成立。
(6)公钥KU=(e,n),私钥KR=(d,n)。
(7)加密时,先将明文变换成0至n-1的一个整数M。若明文较长,可先分割成适当的组,然后再进行交换。设密文为C,则加密过程为:C≡Me (mod n)
(8)解密过程为:M≡Cd (mod n)
以上是关于RSA加密算法的初步学习,以及简单使用。的主要内容,如果未能解决你的问题,请参考以下文章