(
n
)
\varphi(n)
φ(n)互质的整数e](#4varphine_34)
- [5、计算出e对于
φ
(
n
)
\varphi(n)
φ(n)的模反元素d](#5evarphind_37)
- [6、将e、n公开作为公钥进行加密](#6en_47)
- [7、将d,n作为私钥进行解密](#7dn_50)
前言
从古至今,如何用最有效的加密手段保护信息的安全性使之不被窃取、篡改或者破坏都是人们在信息传播中普遍关注的重大问题。最古老的文件加密手段莫过于对称加密,什么是对称加密,打个比方,有一个商人需要给合作伙伴送一批贵重的货物,他便将货物放在一个设置好密码的箱子中,这个密码只有商人知道,同时他又将设置好的密码提前告知合作伙伴,货物送达后,合作伙伴便可以用被告知的密码打开箱子取出货物。即用一种方法加密, 用同一种方法解密, 即为对称加密。对称加密从古至今都是比较广泛使用的一种加密方式,比如在宋朝就将代码法用于军事保密文件的传输,简而言之,比如双方约定某一本书,根据书中的字所在位子,比如“20页第2行第9个字”,破译的时候只要对照好,就能解码。如果不知道双方约定的解码书本,根本无法破解。这种方式现在还管用。比如在谍战片中,情报人员发出的电报,需要用对应的密码本来解译,如何密码本落入到地方手中,后果不堪设想。但是对称加密缺点在于,通过对称加密方法进行加密后,需要告知接收方加密方法才能解密,而将加密方法传输给接受方这一过程中,充满了各种泄密的可能。比如说在战争中,一旦密码本在传输的过程中被敌方截获,那么所有的电报内容都会被地方破解,以至于影响最终战争胜利的走向。所以,对称加密的安全性,最首先取决于加密方式的保密性,其次才是密码破译的难度。 如何能够消除了对称加密中用户交换密钥的需要的同时也能保证其保密性?因此,诞生的非对称加密。非对称加密算法需要两个密钥:公开密钥 (publickey:简称公钥) 和 私有密钥 (privatekey:简称私钥). 公钥与私钥是一 一对应的, 如果用公钥对数据进行加密, 只有用对应的私钥才能解密. 因为加密和解密使用的是两个不同的密钥, 所以这种算法叫作非对称加密算法. 基本过程为:甲方生成一对密钥与公钥, 并将公钥公开, 需要向甲方发送信息的其他角色(乙方, 丙方等) 使用甲方公开的公钥对机密信息进行加密后再发送给甲方. 甲方再用自己私钥对加密后的信息进行解密.甲方想要回复乙方时正好相反, 使用乙方公开的公钥对数据进行加密,同理,乙方使用自己的私钥来进行解密.本文中介绍非对称加密算法中的一种------RSA加密解密算法
一、RSA加密算法是什么?
RSA是1977年由罗纳德·李维斯特(Ron Rivest), 阿迪·萨莫尔(Adi Shamir)和 伦纳德·阿德曼(Leonard Adleman)一起提出的. 当时他们三人都在麻省理工学院工作. RSA就是他们三人姓氏开头字母拼在一起组成的.百度百科
加密过程
1、选择一对不相等且足够大的质数
选择一对不相等且足够大的质数,我们将它描述为p和q。
2、计算p、q的乘积
n=p*q
3、计算n的欧拉函数
φ
(
n
)
=
(
p
−
1
)
∗
(
q
−
1
)
\varphi(n)=(p-1)*(q-1)
φ(n)=(p−1)∗(q−1)
这个公式是如何得到的?那么就要从以下几个概念入手。
互质:如果两个整数的公约数只有1,此时它们叫做互质整数。
欧拉函数:欧拉函数是小于n的正整数中与n互质的数的数目。例如,与6互质且小于6的正整数有两个,分别是1和5,则
φ
(
6
)
=
2
\varphi(6)=2
φ(6)=2。如果n为质数,那么
φ
(
n
)
=
n
−
1
\varphi(n)=n-1
φ(n)=n−1,因为质数在大于1的自然数中,除了1和它本身以外不会再有其他因数的自然数。
此时如果n可以分解成2个互质的整数之积,那么n的欧拉函数等于这两个因子的欧拉函数之积。即若n=p*q,且p、q互质,则
φ
(
n
)
=
φ
(
p
∗
q
)
=
φ
(
p
)
∗
φ
(
q
)
\varphi(n)=\varphi(p*q)=\varphi§*\varphi(q)
φ(n)=φ(p∗q)=φ§∗φ(q)=(p-1)*(q-1)。
证明:p,2p,3p,…,(q−1)∗p有q−1个数整除pq,同理q,2q,3q,…,(p−1)∗q有p−1个数可以整除pq,再加上pq本身能整除pq,那么丢掉这些数剩余的数就与pq互质,一共有pq− (q−1+p−1+1) =(p−1)(q−1) 。
4、选择一个与
φ
(
n
)
\varphi(n)
φ(n)互质的整数e
1<e<
φ
(
n
)
\varphi(n)
φ(n)
5、计算出e对于
φ
(
n
)
\varphi(n)
φ(n)的模反元素d
de mod
φ
(
n
)
\varphi(n)
φ(n) =1
在这里解释下什么是模反元素。
如果两个正整数e和
φ
(
n
)
\varphi(n)
φ(n)互质,那么一定可以找到一个整数d,使得ed-1被
φ
(
n
)
\varphi(n)
φ(n)整除,或者说ed除以
φ
(
n
)
\varphi(n)
φ(n)所得的余数为1,此时,d就叫做e的模反元素。
也就是说在e和φ
(
n
)
\varphi(n)
φ(n)已知的情况下,d只要满足ed-1=k
φ
(
n
)
\varphi(n)
φ(n),k为任意整数,d便是e的模反元素。同时也可得到,e的模反元素d并不是唯一的。
例如,e=3,φ
(
n
)
=
11
\varphi(n)=11
φ(n)=11,则d=4
±
\pm
±k·11。
至此,公钥,私钥便都已经得到。
6、将e、n公开作为公钥进行加密
假设明文为M,密文为C,则加密过程为
M
e
m
o
d
n
=
C
M^e mod n =C
Memodn=C
7、将d,n作为私钥进行解密
C
d
m
o
d
n
=
M
C^d mod n =M
Cdmodn=M
二、RSA算法使用c++语言实现时遇到的问题以及解决方案
1.问题1:模反元素的求解
在第5步中,我们需要计算出e对于
φ
(
n
)
\varphi(n)
φ(n)的模反元素d。
如果使用暴力法求解,那么时间复杂度势必为O(n),这对于一个很大的整数来说,势必需要很长的时间去运行,效率低下,因此需要用一种更快的算法去优化该过程。
解决办法:在第四步中,我们随机产生一个整数e, e的范围是1 < e < φ(n), 并且e与 φ(n) 互质.互质的两个数的最大公约数为1,我们便可以用欧几里得算法去判断是否互质。
欧几里得算法可以用公式表示为gcd(a,b)=gcd(b,a mod b),利用辗转相除的思路。设F(x,y)表示为x,y的最大公约数,取k=x/y,b=x%y,那么x=ky+b,如果一个数能够整除x和y,那么一定可以整除y和b,也就是说,能够整除y和b的数,一定能够整除x和y,所以x和y的公约数和y和b的公约数相同,其最大公约数也相同,则有F(x,y)=F(y,x%y)(x>=y>0),这样就把求两个数的最大公约数转化为求两个更小的数的公约数,直到其中一个数为0,那么另一个数就是两者的最大公约数。
举个例子:
F(42,30)=F(30,12)=F(12,6)=F(6,0)=6
但对于以上过过程,我们如何用代码去实现,我们先从公约数的特点入手。
设x=
k
1
x
1
k_1x_1
k1x1,y=
k
1
y
1
k_1y_1
k1y1,则F(x,y)=
k
1
k_1
k1 F(x1,y1)。
设x=px
1
x_1
x1,(p为素数且y%p!=0)则F(x,y)=F(x1,y)。
现在取p=2。
若x,y均为偶数,则F(x,y)=2F(x/2,y/2)。
若x为偶数,y为奇数则F(x,y)=F(x/2,y)。
若x为奇数,y为偶数则F(x,y)=F(x,y/2)。
若x和y同时为奇数,F(x,y)=F(y,x-y)。(两个奇数相减后必定会出现一个偶数)
这种做法的算法复杂度为O(log2(max(x,y)))。
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int isoushu(long x)
{
if(x%2==0) return 1;
else return 0;
}
int fun(long long a,long long b)
{ if(b>a) return fun(b,a);
else if(a==0)return b;
else
{ if(isoushu(a))
if(isoushu(b))
{
return (fun(a>>1,b>>1)<<1);
}
else return fun(a>>1,b);
else
{ if(isoushu(b))
return fun(a,b>>1);
else return (a-b,b);
}
}
}
main()
{
long long a,b;
cin>>a>>b;
cout<<fun(a,b);
}
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
93道网络安全面试题
内容实在太多,不一一截图了
黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
😝朋友们如果有需要的话,可以联系领取~
1️⃣零基础入门
① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
2️⃣视频配套工具&国内外网安书籍、文档
① 工具
② 视频
③ 书籍
资源较为敏感,未展示全面,需要的最下面获取
② 简历模板
因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆