资源简介
#某电信安数学基础实验(3)基于中国剩余定理的秘密共享方案:
#Alice和Bob的公钥加密通信
#python
#使用中国剩余定理
#使用(t,n)门限来控制秘密,即:n个子秘密中任取t个或以上即可计算得到秘密,而任意t-1个及以下都不可解出秘密
代码片段和文件信息
import math
import random
import
import sys
sys.setrecursionlimit(100000) #扩展递归深度到100000
def gcd(ab): #最大公因数递归判断
if a elif a%b==0:return b
else:return gcd(a%bb)
def ext_gcd(a b): #扩展欧几里得算法
if b == 0:
return 1 0 a
else:
x y gcd = ext_gcd(b a % b) #递归直至余数等于0(需多递归一层用来判断)
x y = y (x - (a // b) * y) #辗转相除法反向推导每层a、b的因子使得gcd(ab)=ax+by成立
return x y gcd
def Chn(ntfileName): #中国剩余定理实现方法
inp1 = open(fileName ‘r+‘) # 读入数据
a = list(range(t)) #aimi初始化,以及对之后要做随机的对象初始化
m = list(range(t))
a_temp=list(range(n))
m_temp=list(range(n))
ran=list(range(n))
random.shuffle(ran) #随机打乱ran[n]
ma = 1
for i in range(n):
a_temp[i] = int(inp1.readline().strip(‘\n‘)) #读一行并除去‘\n‘
for i in range(n):
m_temp[i] = int(inp1.readline().strip(‘\n‘)) #同理读入m的值
for i in range(t):
a[i]= a_temp[ran[i]] #将随机的前t个数据读入
m[i]= m_temp[ran[i]]
ma=ma*m[i]
Mj=[111]
for i in range(t):
Mj[i] = ma // m[i]
print(‘a:%s\nm:%s‘%(am))
con=1 #互素控制量
c=1
for i in range(t-1): #判断是否两两互素
for j i
- 上一篇:疫情数据爬虫并绘制柱状图.py
- 下一篇:最大匹配法分词Python
评论
共有 条评论