学习笔记:RSA加解密公式及算法描述

首先,要了解3个问题:

1、什么是“素数”?
  素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。

2、什么是“互质数”(或“互素数”)?
  小学数学教材对互质数是这样定义的:“公约数只有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的约数,这两个数为互质数等等。

3、什么是模指数运算?
  指数运算谁都懂,不必说了,先说说模运算。模运算是整数运算,有一个整数m,以n为模做模运算,即m mod n。怎样做呢?让m去被n整除,只取所得的余数作为结果,就叫做模运算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。
  模指数运算就是先做指数运算,取其结果再做模运算。

 

进入主题,RSA算法描述:
(1)选择一对不同的、足够大的素数P,Q,选择一个100到200位的素数
(2)计算N=PQ,上面所说的N就等于P和Q的乘积。
(3)计算F(N)=(P-1)(Q-1),同时对P, Q严加保密,不让任何人知道。
(4)找一个与F(N)互质的数E,且1 (5)计算D,使得DE mod F(N) = 1。这个公式也可以表达为D ≡E-1 mod F(N)
这里要解释一下,≡是数论中表示同余的符号。公式中,≡符号的左边必须和符号右边同余,也就是两边模运算结果相同。显而易见,不管F(N)取什么值,符号右边1 mod F(N)的结果都等于1;符号的左边D与E的乘积做模运算后的结果也必须等于1。这就需要计算出D的值,让这个同余等式能够成立。
(6)公钥KU=(E,N),私钥KR=(D,N)。

 

公钥私钥的产生例子:
P:3 , Q:11
N:3 × 11 = 33
F(N) = (3-1)(11-1) = 2 × 10 = 20
E:1 < E < 20 ==> 随机选了3
(D × E)% F(N)= 1
已知E = 3 ,F(N) = 1  =》D 选择 7 ,也可以选择更多比如401等等。
公钥:{ E,N } => { 3, 33 }
私钥:{ D, N } => { 7, 33 }

 

RSA加解密公式:

RSA加密公式
密文 = 明文的E次方对N取模,
将明文自己做E次方,然后将其结果除以N求余数,这个余数就是密文。
E和N的组合就是公钥。
RSA的安全基于:对大数(素数乘积)进行因式分解
E:encrypt(根据特定规则,限定了一个区间,在这个区间内随意选的)
N:素数的乘积

RSA解密公式
明文 = 密文的D次方对N取模,
将密文自己做D次方,然后将其结果除以N求余数,这个余数就是明文。
D和N的组合就是私钥。
D:decrypt(只有知道了是哪两个大素数,才能计算出D)

 

加解密例子:

以上面的公钥和私钥进行加密和解密:
字符表,英文a到z,分别是1到26来表示,我们加密一个单词key,则为11,5,25
套用公式
明文加密:
k :11的3次方,对33求余,加密后等于 11
e :5的3次方,对33求余,加密后等于 26
y :25的3次方,对33求余,加密后等于 16
明文key加密后为kzp
密文解密:
k :11的7次方,对33求余,解密后等于 11
z :26的7次方,对33求余,解密后等于 5
p :16的7次方,对33求余,解密后等于 25
密文kzp解密后为key

 

附:使用OpenSSL工具生成RSA公钥密钥的方法

1、安装OpenSSL工具,配置路径windows的path。
2、在CMD模式下,进入目标文件夹,执行命令
openssl genrsa -out rsa_private_key.pem 1024
rsa_private_key.pem为文件名,1024为密钥长度,还可以选2048等,可以不指定。
3、在CMD模式下,还是在目标文件夹,执行命令
openssl rsa -in rsa_private_key.pem -pubout rsa_public_key.pem
通过刚才的私钥生成对应的公钥。

你可能感兴趣的:(RSA)