from gmpy2 import *
from Crypto.Util.number import *
from random import randint
from math import sqrt, floor
import os# p-1的代表性的非平凡因子
def factor(p):# 用yafu获取所有素因子path="path/yafu-x64.exe"n=p-1l=[]while(n!=1):output=os.popen(path+" \"factor("+str(n)+")\"")output=output.read()output=output.split("***factors found***\n\n")[1]output=output.split("\n\nans = 1")[0]output=output.split("\n")for line in output:factor=int(line.split(" = ")[1])l.append(factor)n//=factorl=list(set(l)) # 去除重复元素result=[(p-1)//i for i in l]return result# 计算原根
def primitive_root(p):l=factor(p)flag=Truefor i in range(2,p):for j in l:if pow(i,j,p)==1:flag=Falsebreakif flag==False:flag=Truecontinueelse:return i# Gen
p = getPrime(256) # 512
g = primitive_root(p)
d = randint(1,p-2)
y = pow(g,d,p)
# pub_key = (p,g,y) pri_key = d# string to long
m = "message"
m = m.encode("utf-8")
m = bytes_to_long(m)# Enc
e = randint(1,p-2)
c1 = pow(g,e,p)
c2 = (m*pow(y,e,p))%p
# c = (c1,c2)# Dec
z = pow(c1,d,p)
z = invert(z,p)
m = (c2*z)%p# long to string
m = long_to_bytes(m)
m = m.decode("utf-8")
print(m)

 主要记录一下原根的求解(代码中的primitive_root函数)。原根的阶是φ(p),遍历2到p,检验阶数是否等于φ(p)=p-1即可。又根据性质:任意正整数的阶整除φ(p),只要逐个检验p-1的因子是否是正整数的阶即可。又因为如果n的阶为a,那么n^(ka)=1 (mod p),所以在知道p-1的所有素因子i时,只要检查每个(p-1)//i即可。
 比如p=31,p-1的因子有[2,3,5],此时只要检测n的[15,10,6]次方,就能确定n是不是原根了。
 对于p-1的素因子的求解,因为p有256位,遍历 p − 1 \sqrt{p-1} p−1 ​是不现实的。于是我使用了yafu这个工具,可以在1秒以内分解完p-1。需要注意:这个工具要自己安装;使用循环是因为yafu没有把所有素因子都给出来(可能我调用得不对),需要多次(大概2次)调用。

密码学基础 上机实验4 ElGamal的Python实现(求解原根)相关推荐

  1. 计算机文化教程实验基础知识,《计算机文化基础上机实验教程》孙家启、黄晓梅、刘奎 著_孔网...

    <计算机文化基础上机实验教程>是安徽省高等学校"十一五"规划教材--<计算机文化基础教程>的配套实验教材.本教程共安排了19个实验,内容包括计算机基础知识( ...

  2. 大学计算机应用基础及上机实验指导,计算机应用基础上机实验指导

    计算机应用基础上机实验指导 (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 计算机应用基础(统考辅导)实习一一.熟悉全国网络学院统一考试 ...

  3. 计算机求职简历考试题题大学,大学计算机基础上机实验指导与习题,word的设计性实-个人简历.docx...

    大学计算机基础上机实验指导与习题,word的设计性实-个人简历 大学计算机基础上机实验指导与习题,word的设计性实-个人简历 篇一:大学计算机基础习题与实验指导--课后习题答案 大学计算机基础习题与 ...

  4. 计算机基础数据表示实验,2018大学计算机基础上机实验报告

    <2018大学计算机基础上机实验报告>由会员分享,可在线阅读,更多相关<2018大学计算机基础上机实验报告(15页珍藏版)>请在人人文库网上搜索. 1.实验(一)1:计算机硬件 ...

  5. 计算机实验基础1,大学计算机基础上机实验1

    〇大学计算机文化基础>上机实验一 [本次上机实验主要内容] 1.在Windows XP下,如何运行指定的程序文件以及如何打开指定的文件夹: 2.如何为桌面添加某可执行程序的快捷方式: 3.熟悉W ...

  6. 计算机基础实验12,计算机基础上机实验精华版一(12页)-原创力文档

    实验一 Windows基本操作 实验目的: 掌握操作系统的启动和关闭方法. 了解和掌握键盘和鼠标的使用. 掌握中英文输入方法.标点符号的使用. 了解和掌握磁盘格式化. 实验设备和软件: 计算机(配置有 ...

  7. 浙江大学计算机基础上机实验答案,2015年浙江大学远程教育计算机基础知识题及参考答案(2)...

    2015年浙江大学远程教育计算机基础知识题,第2章 Windows操作系统及其应用. 第2章 Windows操作系统及其应用(单选题) 完成下列题目,这些题目与期末考试题或将来的统考题类似,请同学们认 ...

  8. 大学计算机上机实验指导与测试pdf,4大学计算机基础上机实验指导与习题--习题.pdf...

    专业收集整理精品文档 !!!!!! 精品文档,值得下载,可以编辑! !! !!!!! ========================================================= ...

  9. 密码学基础---椭圆曲线加密算法ECC(ELGamal Diffie-Hellman)

    1 数学基础 利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性 安全性依赖于求解椭圆曲线离散对数问题的困难性,即已知椭圆曲线上的点P 和 kP 计算k的困难程度 加密流程 示例 椭圆 ...

最新文章

  1. ubuntu软件位置(安装位置, 运行文件位置, 缓存位置)
  2. Cisco WebEx:企业协作服务中的音频需求
  3. Linux 设备驱动开发 —— platform 设备驱动
  4. 【LeetCode笔记】236. 二叉树的最近公共祖先(Java、二叉树、DFS)
  5. 机器人炒饭小块头一一_一罐好饭,智能机器人炒饭出好味道,小块头坚守本心匠心制作!...
  6. 对一道SQL语句题目的再思考
  7. 【数据可视化】免费开源BI工具DataEase实现了SQL数据集和Excel数据集关联?(什么?快别挡着我,冲!)
  8. 抖音源码为什么会成为短视频源码中的翘楚
  9. 读书——我本将心向明月,奈何明月照沟渠。知我者谓我心忧,不知我者谓我何求。...
  10. XP系统,开机启动报NTDETECT 失败
  11. 本地搭建ipV6测试环境
  12. 新一代Hive客户端工具:Beeline
  13. 计算机学渣和你说说从毕业到工作
  14. Introduce to Inforamtion Retrieval读书笔记(1)
  15. nrf52832 --- 看门狗
  16. 千名德国基尔居民测试疫情警报手环
  17. .pkl文件是什么?python
  18. 以太坊的 Merkle 树
  19. 托管 非托管_选择托管服务提供商的终极指南
  20. Android Studio解决Plugin [id: ‘com.android.application‘, version: ‘x.x.x‘, apply: false] was not found

热门文章

  1. 索引是什么,怎么确定索引
  2. 【ha知识两问】ha软件是什么?ha软件用途有哪些?
  3. oracle文件快速入库,文件入库ORACLE自动化脚本
  4. Python全栈(八)Flask项目实战之8.CMS后台轮播图管理
  5. java判断单元格是否是日期_Excel单元格,日期/时间返回Int而不是日期/时间字符串...
  6. Eclipse每次打包注意事项
  7. python入门指南 许半仙txt百度云-《漩涡》TXT全本 百度云网盘下载 by就不告诉你...
  8. ubuntu网络无法连接
  9. 光学成像系统中的像差
  10. 利用Selenium秒填朋友圈各种问卷星调查问卷