非对称加密(RSA)实际加解密举例

为了能直观计算,选用极小的质数演示核心逻辑(实际工程中会用 2048/4096 位超大质数,原理完全一致),全程还原密钥生成、公钥加密、私钥解密三步核心流程,所有计算均为手算可验证,贴合 RSA 算法标准逻辑。

核心前提

RSA 算法基于大质数分解的单向性,核心要素:

  • 两个互质的大质数pq
  • 模数N = p × q(公钥 / 私钥共用)
  • 欧拉函数φ(N) = (p-1) × (q-1)
  • 公钥指数e:满足1 < e < φ(N)eφ(N)互质(常用65537,演示用小值)
  • 私钥指数d:满足(e × d) mod φ(N) = 1de在模φ(N)下的逆元)
  • 加密公式:密文C = (明文M)^e mod N
  • 解密公式:明文M = (密文C)^d mod N

一、确定基础参数(极小质数,仅作演示)

为了手算方便,选最小的两个大质数(实际为小质数)p = 7q = 11(均为质数,且互质)

二、步骤 1:生成核心基础值(N、φ(N))

  1. 计算模数N:RSA 的加解密模,公钥 / 私钥均包含此值N = p × q = 7 × 11 = 77
  2. 计算欧拉函数φ(N):RSA 密钥生成的核心中间值(欧拉函数φ(ab)=φ(a)×φ(b),质数的欧拉函数φ(x)=x-1φ(N) = (7-1) × (11-1) = 6 × 10 = 60

三、步骤 2:生成公钥(e, N)

公钥要求:1 < e < 60,且eφ(N)=60互质(最大公约数为 1)

选值与验证

选最常用的小值e = 13(也可选 3、7、17,只要满足互质即可)验证互质性:gcd(13,60) = 1(13 是质数,不整除 60,满足要求)

最终公钥

公钥PU = (e, N) = (13, 77)(可公开,任何人都能获取)

四、步骤 3:生成私钥(d, N)

私钥核心是求e在模φ(N)下的乘法逆元 d,要求:(e × d) mod φ(N) = 1(13 × d) mod 60 = 1

求解 d(手算试值法,工程中用扩展欧几里得算法)

即找整数d,使13d - 60k = 1(k 为任意整数),试值:

  • d=37时:13×37 = 481481 ÷ 60 = 8……1481 mod 60 = 1完全满足条件,因此d = 37

最终私钥

私钥PR = (d, N) = (37, 77)(严格保密,仅持有者保存)

五、步骤 4:公钥加密(任何人都能做,用公开的 PU)

前提:明文 M 的要求

RSA 加密的明文M必须满足 **0 < M < N**(本例中0 < M < 77),若明文大于 N,需分段加密(工程中必做,演示用单数字)。

选明文并加密

选明文M = 6(任意满足 0<M<77 的数均可,如 10、25)代入加密公式C = M^e mod NC = 6^13 mod 77

简化计算(避免直接算 6^13,用模运算性质分步算)

模运算核心性质:(a×b) mod n = [(a mod n)×(b mod n)] mod n

  1. 6^2 = 3636 mod77=36
  2. 6^4 = (6^2)^2 = 36^2=12961296 mod77:77×16=1232,1296-1232=64
  3. 6^8 = (6^4)^2 = 64^2=40964096 mod77:77×53=4081,4096-4081=15
  4. 6^13 = 6^8 × 6^4 × 6^1 = 15×64×6
  5. 分步取模:15×64=960 → 960 mod77=960-77×12=960-924=3636×6=216 → 216 mod77=216-77×2=62最终密文 C = 62(加密后的数据,可公开传输)

六、步骤 5:私钥解密(仅持有者能做,用保密的 PR)

将密文C=62代入解密公式M = C^d mod NM = 62^37 mod 77

关键简化:先对密文取模(降低计算量)

62 < 77,故62 mod77=62;且负数模运算62 = 77 - 1562 ≡ -15 mod77利用模运算性质:(a^b) mod n = [(-a)^b] mod n(b 为奇数时),因此:62^37 mod77 = (-15)^37 mod77 = - (15^37 mod77)

继续简化:求 15^37 mod77(用费马小定理+ 分步取模)

费马小定理:若 a 与 n 互质,a^(k) mod n = a^(k mod φ(n)) mod n15 与 77 互质(gcd (15,77)=1),故15^37 mod77 = 15^(37 mod 60) mod77 = 15^37 mod77,分步拆解 37:37=32+4+1

  1. 15^2=225 mod77=225-2×77=71 ≡ -6 mod77
  2. 15^4=(15^2)^2=(-6)^2=36 mod77=36
  3. 15^8=(15^4)^2=36^2=1296 mod77=64(同加密步骤)
  4. 15^16=(15^8)^2=64^2=4096 mod77=15(同加密步骤)
  5. 15^32=(15^16)^2=15^2=71 ≡ -6 mod77
  6. 15^37=15^32 ×15^4 ×15^1 = (-6)×36×15 = -3240
  7. 15^37 mod77:计算 3240÷77=42×77=3234 → 3240 mod77=6 → -3240 mod77= -6 mod77=71

最终解密

62^37 mod77 = -71 mod77 = 77-71 = 6解密后得到明文 M=6,与原始明文完全一致,加解密成功!

七、演示总结(核心参数 & 结果)

核心参数数值说明
质数 p/q7/11演示用小质数,实际为 2048 位超大质数
模数 N77公钥 / 私钥共用,实际为千位以上大数
欧拉函数 φ(N)60密钥生成中间值,不对外公开
公钥 (e,N)(13,77)可公开,用于加密 / 验签
私钥 (d,N)(37,77)严格保密,用于解密 / 签名
原始明文 M6需满足 0<M<N,否则分段加密
公钥加密密文 C62传输过程中仅暴露此值
私钥解密明文 M6还原原始数据,验证成功

八、工程实际与演示的区别

  1. 质数规模:演示用 2 位小质数,实际 RSA 用2048/4096 位超大质数(如 p、q 各 1024 位),N 为 2048/4096 位,大质数分解耗时超宇宙年龄,保证安全性;
  2. e 的取值:工程中固定用e=65537(10000000000000001B),兼顾安全性和运算速度,避免小 e(如 3、7)的安全漏洞;
  3. 求解 d 的方法:演示用试值法,实际用扩展欧几里得算法(计算机快速求解逆元),支持超大数计算;
  4. 明文处理:演示用单数字,实际需将明文分段(每段长度<N 的位数),并添加填充规则(如 PKCS#1 v1.5),避免明文攻击;
  5. 运算方式:嵌入式 / HVAC 中用 MCU硬件加密加速或轻量开源库(mbedTLS),避免纯软件计算超大数的性能损耗。

九、延伸:私钥签名 + 公钥验签(演示逻辑)

非对称加密的另一核心用法,用私钥加密(签名)公钥解密(验签),验证身份和数据完整性,演示如下:

  1. 明文 M=6,用私钥 (d=37,N=77) 签名:C=6^37 mod77=62(同解密步骤的逆运算);
  2. 任何人用公钥 (e=13,N=77) 验签:M=62^13 mod77=6
  3. 验签结果与原始明文一致,证明数据是私钥持有者发送,且未被篡改(若数据被改,密文会变,验签结果≠原始明文)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值