不过E和N不并不是随便什么数都可以的,它们都是经过严格的数学计算得出的。这里需要注意的是:E是加密(Encryption)的首字母,N是数字(Number)的首字母。
RSA算法定理
设P为信息明文,两个加密密钥为e1和e2,公共模数是n,则:
C1 = P^e1mod n
C2 = P^e2 mod n
一、任何大于1的整数a能被因式分解为如下唯一形式:
a=p1p2…pl(p1,p2,…,pl为素数)
二、模运算
①{[a(mod n)]×[b(mod n)]}modn≡(a×b)(mod n)
②如果(a×b)=(a×c)(mod n),a与n互素,则
b=c(mod n)
三、费马定理
若p是素数,a与p互素,则
a^(p-1)≡1 (mod p)
四、欧拉定理
欧拉函数φ(n)表示不大于n且与n互素的正整数的个数。
当n是素数,φ(n)=n-1。n=pq,p,q均为素数时,则φ(n)= φ(p)φ(q)=(p-1)(q-1)。
对于互素的a和n,有a^φ(n)≡1(mod n)
RSA算法应用
数据传输
RSA的非对称特性用于数据传输很合适,这里生成了公钥给客户端,私钥放在服务器端用于解密传输过来的信息。
openssl genrsa -out rsa_private_key.pem 1024 openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
生成公钥私钥,公钥给客户端,JS调用去加密,加密后的数据是乱码没有办法直接输出,因此需要base64进行编码。
Web登录密码加密传输
使用了RSA非对称加密算法,加密所用的密钥和解密所用的密钥是不相同的。简单来说就是:你使用我的公钥加密,我使用我的私钥来解密;如果你不使用我的公钥加密,那我无法解密;如果我没有私钥,我也没法解密。
RSA算法安全性
RSA是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。