这个实战题目来源于我参加的某海外CTF比赛原题,由于这个题目相较于一般的 RSA 加密方式有些许差别,个人感觉比较有趣且不难懂,于是拿来分享。
对于 RSA 加密的基本认识
一、什么是 RSA 加密算法
RSA 加密是一种非对称加密方式,使用2种密钥分别对数据进行加解密:
a、公钥:用于数据的加密,可以公开共享
b、私钥:用于数据的解密,需要妥善保管,不能泄露
公钥只能用于加密数据,私钥只能用于解密数据,二者不可更换使用,即用公钥加密的数据只能使用对应的私钥进行解密,反之亦然。
二、RSA 加密的数学基础
RSA算法的核心是大数运算和模运算,基于数论中的一些性质:
a、大素数的生成:选择两个大素数 p 和 q
b、模数 n 的计算: n=p×q
c、欧拉函数 φ(n): φ(n)=(p−1)×(q−1)
d、选择加密指数 e: e 与 φ(n) 互质,通常选择 e=65537,可以带来较好的计算效率
e、计算解密指数 d:d 是 e 关于 φ(n) 的模逆元素,即满足 e⋅d≡1 mod φ(n)
三、密钥生成步骤
1、选择两个大素数 p 和 q,计算 n=p×q
2、计算 φ(n)=(p−1)×(q−1)
3、选择一个整数 e,满足 1<e<φ(n)且 gcd(e,φ(n))=1
4、计算 e 的模逆 d,即 e⋅d≡1mod φ(n)
5、公钥为 (n,e),私钥为 (n,d)
四、加密过程
要加密的明文消息 m 转换为整数 m 且 0≤m<n,加密得到的密文 c 计算如下:
五、解密过程
接收到密文