• 大小: 3KB
    文件类型: .py
    金币: 2
    下载: 0 次
    发布日期: 2024-01-28
  • 语言: Python
  • 标签:

资源简介

#某电信安数学基础实验(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

评论

共有 条评论

相关资源