天天看点

RSA算法

RSA是(Rivest Shamir and Adleman)的缩写,Ron Rivest, AdiShamir 和Leonard Adleman这仨哥们挺NB的,20多年前创造了这个算法,现在也已经广泛使用了。

这是一种公钥的加密算法,加密和解密是互逆的。如果用公钥加密,私钥解密,可实现保密通信;如果用私钥加密,公钥解密,可实现数字签名。下面说一下算法:

1、首先选择两个大素数p和q

都要大于10^100,因为小素数很容分解

2、令n=p*q和z=(p-1)*(q-1)   

这部没什么可解释的

3、选择d,要求d与z互质。         

只要是互质数都行

4、选择e,要求e*d=1 (mod z)    

一说这个mod就烦人了,这里的mod的意思是数学符号,并非编程的mod,好比a=b (mod c),意思是a和b除以c后,余数相同。

5、明文P被分为k位的块,k要满足2^k<n的最大整数,于是0<=p<n。

这不没什么可说的。

下面是加密和解密过程,先说公钥加密,私钥解密的过程:

1、公钥加密用到e,n这两个数。C=P^e (mod n)

C是加密后的密文,P是明文,e和n就是算出来的数字了,但是这里的mod是电脑编程里的运算符,意思是取余数。

    解密用到d,n,P=C^d (mod n)

    这样明文P就出来了。

2、私钥用到d,n这两个数。C=P^d (mod n)

    解密用到e,n这两个数。P=C^e (mod n)