一、非对称加密算法特点:
2、选择两个大素数p,q, p!=q
3、计算n=p*q,m=(p-1)*(q-1)
4、选择整数e,使得互质判别函数 gcd(e,m)=1
5、计算e关于m的乘法逆元d,本例中逆元求法,用的是欧几里得法
6、公钥: KP={e,n}, 私钥: Ks={d,n}
7、公布n,e; 保密p,q,d,
8、 使用
加密: C = M^e mod n
解密: M = C^d mod n
三、代码详解(python实现代码)
##writer liuyang@BUAASoftwareDepartment
#date:2014/05/07
#function:rsa加密
#contact me:734056968@qq.com
import random #导入随机函数库
#进行素性监测-miller-Rabin算法,判别依据a^(n-1)≡1 (mod n) (a为任意2~n-1的正整数)则可近似认为n为素数。
def PRIME_test(number):
s=6 #s是需要测试的次数
for i in range(s):
a=random.randrange(2,number-1)
if pow(a,number-1,number)!=1:
return 0
return 1
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
附:
Miller-Rabin素性检测算法
算法含义如果a^(n-1)≡1 (mod n) (a为任意2~n-1的正整数)则可近似认为n为素数。这种方法叫做 Miller-Rabbin算法。对于待验证的数n,我们不断取a验证a^(n-1) mod n是否等于1,不是则n一定不是素数,共取s次