# 生成一个大素数pdefgenerate_p():whileTrue:# 使得p也在150位,p = 2t + 1时p为强素数,即t=p/2-1t = sympy.randprime(10**149,10**150/2-1)if sympy.isprime(t):p =2* t +1iflen(str(p))==150and sympy.isprime(p)and(p %4==3):breakreturn p
2.2 加密的设计与实现
# 快速幂模运算(大指数的模运算),计算a^e mod mdeffastExpMod(a, e, m):a = a % mres =1while e !=0:# if e & 1的判断是一种位运算,用于检查整数e的最低位是否为1。在二进制表示中,如果一个整数的最低位(最右边的位)是1,那么这个数就是奇数;如果最低位是0,那么这个数就是偶数。因此,if e & 1的判断常用于检查e是否为奇数。如果e & 1的结果为1,那么e就是奇数;如果结果为0,那么e就是偶数# 如果e是奇数,a^e=a^(e-1)*a,a^(e-1)可通过循环进行平方计算,还差个a直接乘进resif e &1:res =(res * a)% me >>=1# 右移一位,相当于将 e 除以 2# a, a^2, a^4, a^8, ... , a^(2^n)a =(a * a)% mreturn res# 加密defencode(m, n):c = m**2% nreturn c