关于 RSA 算法的疑问
网上很多 RSA 的证明都是基于欧拉定理 m ^y(n) = 1 mod n
m ^(ky(n) + 1) = 1 ^k • m mod n = m
这里,有个前提是 m 和 n 互质啊, 这里 n =p•q
现实中,我们需要加密的消息千奇百怪,很有可能 m = p 或者 p 的倍数。
这样就不满足欧拉定理条件?
在 m = k *p 的情况下,如何证明呢
/***
p = 3
q = 5
n = 15
y(n) = (3-1) * (5-1) = 8
e = 3 pulic key
d = 3 private key
e * d = y(n) + 1 = 9 ;
***/
console.log('\tM \tEuler test \tRSA test ')
for (let msg = 0; msg < 15; msg++) {
var z = msg;
var z0 = msg;
z = (z * z) % 15;
z = (z * z) % 15;
z = (z * z) % 15;
var rsa = z * z0 % 15;
console.log(`\t ${msg} \t${z}${z==1 ? ' ' : ' x'} \t${rsa} `)
}
结果
M 欧拉测试(m^8==1) Rsa 测试(m^9=m)
0 0 x 0
1 1 1
2 1 2
3 6 x 3
4 1 4
5 10 x 5
6 6 x 6
7 1 7
8 1 8
9 6 x 9
10 10 x 10
11 1 11
12 6 x 12
13 1 13
14 1 14
竟然不支持表格
结果也是正常,消息 m 需要与 n 互质欧拉公式菜鸟成立,但是 RSA 确能正常加解密
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.