本文中,讲解下为何rsa加密时,明文长度不能超过模数n
下面是明文长度大于模数时,报的错
rsa加密时,有六个重要的数:
质数:p
质数:q
模数:n=pq
欧拉函数:
ϕ
\phi
ϕ(n)=(p-1)(q-1)
公钥指数e:其中e满足1<e<
ϕ
\phi
ϕ(n),并且e与
ϕ
\phi
ϕ(n)互质
私钥指数d:满足ed
≡
\equiv
≡ 1(mod
ϕ
\phi
ϕ(n))
例如,取p=3,q=11,则n=33,
ϕ
\phi
ϕ(n)=20,取e=3,计算出d=7。
我们取明文50,此数大于模数n,利用加密公式me
≡
\equiv
≡ c(mod n),将m=50,e=3,n=33代入公式,得到
503
≡
\equiv
≡ c(mod 33),求得密文c=29。
然后再利用解密公司cd
≡
\equiv
≡ m2(mod n),将c=29,d=7,n=33代入公式,得到
297
≡
\equiv
≡ m2(mod 33),求得明文m2=17,并不是原来的50。但是可以看出17和50刚好相差模数33的整数倍。所以可以看出明文长度要小于模数n,否则解密后,得到的不是原来的数字。
后续:为何在加密时,不一个字符一个字符加密呢,比如字符"123456789000",为何不分别将1,2,3,这些字符分别加密,再组合在一块,这样就不会出现明文长度超过模数n,这主要是因为现在一般e取的是65537,单独将某个字符加密,产生的密文的长度大概率也是很长的,单独加密单个字符,会使得最终生成的字符串太大。