RSA的工作原理

明文 M   加密 Mᵉ mod n = C

密文 C    解密 Cᵈ mod n = M

证明:Cᵈ mod n=( Mᵉ mod n)ᵈ mod n= Mᵉᵈ mod n= M^{k\varphi (n)+1} mod n= (M^{k\varphi (n)} *M) mod n

M^{k\varphi (n)} 

RSA是一种非对称的加密机制,属于公开密钥密码体制,使用不同的加密密钥与解密密钥,且由已知加密密钥推导出解密密钥在计算上是不可行的,以此保障安全。其原理基于对极大整数做因数分解的困难性。以下是RSA加密原理的详细介绍: #### 密钥生成 1. **选择两个大质数**:随机选择两个大的质数 $p$ 和 $q$,这两个质数是保密的。 2. **计算 $n$ 和 $\varphi(n)$**: - 计算 $n = p \times q$,$n$ 是RSA算法的一个重要参数,在公钥和私钥中都会用到。 - 计算欧拉函数 $\varphi(n)=(p - 1)\times(q - 1)$。 3. **选择公钥指数 $e$**:选择一个整数 $e$,使得 $1 < e < \varphi(n)$,并且 $e$ 与 $\varphi(n)$ 互质,即 $\gcd(e, \varphi(n)) = 1$。公钥就是 $(e, n)$。 4. **计算私钥指数 $d$**:找到一个整数 $d$,使得 $e\times d\equiv 1\pmod{\varphi(n)}$,也就是 $e\times d = 1 + k\times\varphi(n)$ ($k$ 为整数)。私钥就是 $(d, n)$。 #### 加密过程 假设要加密的明文为 $m$,且 $m < n$。使用公钥 $(e, n)$ 对明文 $m$ 进行加密,得到密文 $c$,加密公式为:$c = m^e\bmod n$。 #### 解密过程 使用私钥 $(d, n)$ 对密文 $c$ 进行解密,得到明文 $m$,解密公式为:$m = c^d\bmod n$。 ### 代码示例 以下是一个使用Python的`cryptography`库实现RSA加密和解密的简单示例: ```python from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.asymmetric import rsa, padding from cryptography.hazmat.primitives import serialization, hashes # 生成私钥 private_key = rsa.generate_private_key( public_exponent=65537, key_size=2048, backend=default_backend() ) # 从私钥中导出公钥 public_key = private_key.public_key() # 要加密的明文 message = b"Hello, RSA!" # 使用公钥加密 encrypted = public_key.encrypt( message, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None ) ) # 使用私钥解密 decrypted = private_key.decrypt( encrypted, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None ) ) print(f"Original message: {message}") print(f"Decrypted message: {decrypted}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值