-
大小: 3KB文件類型: .py金幣: 1下載: 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
- 上一篇:疫情數據爬蟲并繪制柱狀圖.py
- 下一篇:最大匹配法分詞Python
評論
共有 條評論