基于中国剩余定理的秘密共享方案(python)实现
基于中国剩余定理的秘密共享方案(python)实现
一、运行环境
1.pycharm 2020专业版
2.python 3.6
二、原理
三、注意事项
1.程序中使用的(3,5)门限(如果需要其他的门限可以在程序上进行相应的更改)
2.本次实验使用的秘密为500位左右的大数
3.本次实验的重点在于如何生成5个满足条件的整数,为了保证前三个整数的乘积大于所给的秘密(500位的大数),后两个整数的乘积小于所给的秘密,我们生成的整数在 1 0 167 ∼ 1 0 168 10^{167}\sim 10^{168} 10167∼10168之间,因为3×167=501>500,2×168=336<500
temp = random.randint(pow(10, 167), pow(10, 168))
生成满足条件的整数的函数如下
def find_d1():d = [1, 1, 1, 1, 1] #初始化d数组temp = random.randint(pow(10, 167), pow(10, 168))d[0] = tempi = 1while (i < 5):temp = random.randint(pow(10, 167), pow(10, 168))d[i] = tempif (judge1(d, i + 1) == 1): #judge1是判断是否互素的函数i = i + 1return d
这个函数针对产生5个符合条件的整数,可以根据自己的需要进行更改
四、代码
import numpy as np
import random
#求最大公约数
def gcd(a,b):if b==0: return aelse: return gcd(b, a%b)def findModReverse(a, m): # 扩展欧几里得算法求模逆if gcd(a, m) != 1:return Noneu1, u2, u3 = 1, 0, av1, v2, v3 = 0, 1, mwhile v3 != 0:q = u3 // v3v1, v2, v3, u1, u2, u3 = (u1 - q * v1), (u2 - q * v2), (u3 - q * v3), v1, v2, v3return u1 % mdef divresult(m):Mj = [1, 1, 1, 1, 1, 1, 1, 1, 1]for i in range(0, len(m)):for j in range(0, len(m)):if (i == j):Mj[i] = Mj[i] * 1else:Mj[i] = Mj[i] * m[j]return Mj
#求解N和M
def fun1(d,t):N=1M=1for i in range(0,t):N=N*d[i]for i in range(len(d)-t+1,len(d)):M=M*d[i]return N,M
def findk(d,k):k1=[1,1,1,1,1,1,1]for i in range(0,len(d)):k1[i]=k%d[i]k1=k1[0:len(d)]return k1def ChineseSurplus(k,d,t): #中国剩余定义求解方程m = d[0:t]a = k[0:t]flag = 1# Step1:计算连乘m1 = 1for i in range(0, len(m)):m1 = m1 * m[i]# Step2:计算MjMj = divresult(m)Mj1 = [0, 0, 0, 0, 0, 0, 0]# Step3:计算模的逆for i in range(0, len(m)):Mj1[i] = findModReverse(Mj[i], m[i])# 最后的xx = 0for i in range(0, len(m)):x = x + Mj[i] * Mj1[i] * a[i]result = x % m1return result#定义d数组
#问题是如何产生合适的d值
def judge1(m, num):flag1 = 1for i in range(0, num):for j in range(0, num):if (gcd(m[i], m[j]) != 1) & (i != j):flag1 = 0breakreturn flag1#产生d数组
def find_d1():d = [1, 1, 1, 1, 1] #初始化d数组temp = random.randint(pow(10, 167), pow(10, 168))d[0] = tempi = 1while (i < 5):temp = random.randint(pow(10, 167), pow(10, 168))d[i] = tempif (judge1(d, i + 1) == 1):i = i + 1return d#500位的大数作为秘密
k=2074722246773485207821695222107608587480996474721117292752992589912196684750549658310084416732550001130212021515151510511200515102155022515152074722246773485207821695222107608587480996474721117292752992589912196684750549658310084416732550001130212021515151510511200515102155022515152074722246773485207821695222107608587480996474721117292752992589912196684750549658310084416732550001130212021515151510511200515102155022515152074722246773485207821695222107608587480996474721117292752992589912196684750
#step1:生成符合条件的d值
d=find_d1()
print("d数组为:")
print(d)
#step2:计算N和M的值print("N和M的值分别为:")
N,M=fun1(d,3)
print(N)
print(M)
#求k
k1=findk(d,k)
#利用中国剩余定理求解
result=ChineseSurplus(k1,d,3)
print("最后恢复的明文为:")
print(result)
五、运行结果
我们可以看到恢复出了明文
基于中国剩余定理的秘密共享方案(python)实现相关推荐
- 基于中国剩余定理的秘密共享方案(Python实现)
本文目录 一.实验目的(包括实验环境.实现目标等等) 1. 实验环境 2. 实现目标 二.方案设计(包括背景.原理.必要的公式.图表.算法步骤等等) 1. 背景 2. 原理 3. 公式 4. 中国剩余 ...
- 基于中国剩余定理的秘密共享方案(miracl库)
注意:本文算法效率极低,大数在3位数时就会运行10分钟左右,若是更大的数字,博主等不了没试过.请移步https://blog.csdn.net/qq_42450533/article/details/ ...
- 基于中国剩余定理的秘密共享方案(miracl)
基于中国剩余定理的秘密共享方案 该算法比https://blog.csdn.net/qq_42450533/article/details/102942808的代码效率更高. 秘密共享是将秘密以适当的 ...
- python的秘密_Shamir秘密共享方案 (Python)
Shamir's Secret Sharing scheme is an important cryptographic algorithm that allows private informati ...
- shamir秘密共享方案_Shamir秘密分享的初学者指南
shamir秘密共享方案 An introduction to this privacy-preserving cryptographic technique and how Keyless is u ...
- 基于中国剩余定理的(t, n)门限秘密共享方案
基于中国剩余定理的(t, n)门限秘密共享方案 目录 实验目的 实验环境 实现目标 方案设计 背景 实验原理 算法步骤 方案实现 流程图 主要函数介绍 主要代码 数据分析 数据1 数据1运行结果 数据 ...
- 基于Pedersen承诺的可验证秘密共享方案: Pedersen VSS
传统(t,n)门限秘密共享方案并未考虑参与者和秘密分发者可能出现的恶意行为: 当重构秘密时,不诚实的参与者发送错误的秘密份额 当份额分发时,秘密分发者分发错误的秘密份额 为解决上述欺骗问题,有学者于1 ...
- 基于同态加密和秘密共享的无第三方纵向逻辑回归
基于同态加密和秘密共享的逻辑回归方案 0,写在前面 Fate升级1.7.0版本之后,实现了阿里2021KDD的一篇论文,When Homomorphic Encryption Marries Secr ...
- LSSS线性秘密共享方案详细构造方法与原理解释
关于LSSS线性秘密共享方案详细构造方法与原理解释 文章目录 1.LSSS定义 2.Access Tree转化为LSSS矩阵方法 3.LSSS算法正确性证明 1.LSSS定义 LSSS英文精确定义如下 ...
- 关于秘密共享方案的实例(shamir)
网上有些博主可能发布过相关的文章,我之前也动手算过一次,怎么算都算不对.后来发现mod p这个运算的除法运算比较独特. 首先介绍一个小费马定理: 引申为: 那么有: 接下来步入正题:shamir(t, ...
最新文章
- 04.ARP:地址解析协议
- 渗透测试中的一波三折
- python模拟浏览器模块,python模块学习---mechanize(模拟浏览器)
- linux 下 读取某个文件的某一行或者某几行
- 支付宝支付-手机浏览器H5支付
- 一款非常好用的音乐标签及管理工具:Yate for Mac
- 同一路由器下两台电脑ping不通_复杂网络环境下路由器配置问题导致业务故障处理案例分享...
- 更改后缀为.dex文件为.odex文件 让你的程序瘦身 运行更稳定
- B00001 C语言动态存储分配空间作为数组
- Flash CS4运行时提示:Java运行时环境初始化时出现错误。您可能需要重新安装 Flash。解决方案
- python题目-判断素数
- 串珠问题(今日头条笔试)
- 数字图像隐写术之卡方分布
- 奇葩需求系列-距离明天十二点倒计时
- 微型计算机电路软件,微机控制电路
- 华为往事(九)--邳州开局
- iOS APP调取短信 发送消息给其他人
- Windows用户的分类
- Apache2 + PHP之伪静态
- 自然语言处理(5)——语言模型
热门文章
- 自定义注解配合切面做日志记录
- Java(SE)基础知识
- 【论文笔记】(2023-10-15更新) Guided Skill Learning and Abstraction for Long-Horizon Manipulation
- 用CSS写出来的马里奥?成功把box-shadow玩坏了~
- C语言接收一个整数划分成5的倍数,C语言-第5章-模块化程序设计.pptx
- UE verilog always(*) 星花 被注释
- 又一家生态链企业上市,小米航母舰队逐渐成形
- 题解(657.div2)
- 地面互动投影解决方案
- 使用CFR进行反编译