RSA加密解密步骤验证-基于全网最简单易懂案例科普解析!

前言

​ 某天在B站上看到了一个关于RSA加密算法的视频,感觉讲得很有意思,于是决定以此为契机学习RSA,然后手动验证一下视频中的消息加密解密过程。

参考

之后搜索查阅了一些RSA算法加密解密的资料,然后手动验证了上面视频中消息加解密的过程。下面是收集的几篇比较清晰易懂的、也是本文主要参考的文章:

RSA简介

一、主要步骤

步骤说明描述备注
1找出质数P 、Q随机找两个质数P和Q,P与Q越大,越安全
2计算公共模数N = P * Q-
3欧拉函数φ(N) = φ§φ(Q)= (P-1)(Q-1)即积的欧拉函数等于各个因子的欧拉函数之积
4计算公钥E1 < E < φ(N)随机选择一个整数E,条件是1<E<φ(n),且E与φ(n) 互质
5计算私钥DE * D % φ(N) = 1选择一个整数D,可以使得E乘D 除以φ(n) 的余数为 1
6加密C =M ^ E mod NC:密文 M:明文
7解密M =C ^ D mod NC:密文 M:明文
  • 实际使用时,由E和N组成公钥,由D和N组成私钥,即

    公钥=(E , N)

    私钥=(D, N)

二、简单示例

1、找出质数 P 、Q
P = 3  
Q = 11
2、计算公共模数
N = P * Q = 3 * 11 = 33
3、 欧拉函数
φ(N) = (P-1)(Q-1) = 2 * 10 = 20
4、计算公钥E
1 < E < φ(N)
1 < E < 20

E 的取值范围 {3, 7, 9, 11, 13, 17, 19},E的取值必须是整数, E 和 φ(N) 必须是互质数
3 和 φ(N) =20 互为质数,满足条件
为了测试,我们取最小的值 E =3

5、计算私钥D
E * D % φ(N) = 1
3 * D  % 20 = 1   

根据上面可计算出 D = 7

6、公钥加密

​ 我们这里为了演示,就加密一个比较小的数字 M = 2

公式:C = M^E mod N

M = 2
E = 3
N = 33

C = 2^3 % 33 = 8

​ 明文 “2” 经过 RSA 加密后变成了密文 “8”

7、私钥解密

M =C^D mod N

C = 8
D = 7
N = 33

M = 8^7 % 33
8 * 8 * 8 * 8 * 8 * 8 * 8=2097152
8 * 8 * 8 * 8 * 8 * 8 * 8 % 33 = 2

​ 密文 “8” 经过 RSA 解密后变成了明文 2

RSA加解密手动验证

​ 回到最初目的,下面开始跟随视频中的步骤验证过程:

1、找出质数 P 、Q
P = 17
Q = 19
2、计算公共模数
N = P * Q = 17 * 19 = 323
3、 欧拉函数
φ(N) = (P-1)(Q-1) = 16 * 18 = 288
4、计算公钥E
1 < E < φ(N)
1 < E < 288

E必须是与φ(N) 互质的整数,且取值范围为 1 < E < φ(N)
这里选择了 E =61

因此封装的公钥=(E , N)=(61,323)

5、计算私钥D
E * D % φ(N) = 1
61 * D  % 288 = 1

选择一个整数D,可以使得E乘D 除以φ(n) 的余数为 1
这里选择了 D = 85

因此封装的私钥=(D, N)=(85,323)

6、公钥加密
  • 将待加密数据How are you转换成Unicode编码(16进制格式):
Howareyou
486F772061726520796F75
  • 公钥=(E , N)=(61,323),对上述字符逐个进行加密

加密公式:C = M^E mod N (C:密文 M:明文)

​ 这里以字符a为例,

先将十六进制的0x61转成十进制97,故M = 97
E = 61
N = 323
C = 97^61 % 323 = 14

​ 得出字符a加密后的密文是14,对应的十六进制是0xE

  • …依此类推,得出所有明文经过后的密文如下表:
486F772061726520796F75
594DBB101E85ED101535D2
7、私钥解密
  • 解密过程类似,私钥=(D, N)=(85,323),对上一步的密文表逐个进行解密

解密公式:M =C^D mod N (C:密文 M:明文)

​ 同样以字符a为例:

先将密文0xE转成十进制14,故M = 14
D = 85
N = 323
C = 14^85 % 323 = 97

​ 得到解密出来的明文97,即字符a

  • …依此类推,能够得到密文表对应的所有明文How are you

    解密成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值