#1.构造全局变量:选一素数p,模p的原根g,随机选取x,且x和g都小于p,计算y=g的x次方(mod p)
#2.加密算法:将明文信息M表示成为{0到p-1}里的数,再随机选取随机数k,计算c1=g的x次方(mod p)
#c2=M*y的k次方(mod p)
#3.解密算法:计算M=c1的-x次方*c2(mod p)
import math
p=int(input("请输入素数p:"))
t=0
for i in range(2,int(math.sqrt(p))+1):if p % i == 0:print(p,"不是素数")t+=1break
if t != 1:print("素数p的原根有")for j in range(1, p):for i in range(1, ((p - 1) // 2) + 1):if pow(j, i) % p == p - 1 and i != (p - 1) / 2:breakelse:if pow(j, i) % p == p - 1 and i == (p - 1) / 2:print(j)
g=int(input("请输入素数p的原根g:"))
x=int(input("请输入私钥(x<p):"))
print("保密x")
y=pow(g,x)%p
print("私有密钥为({},{},{})".format(p,g,x))
print("公开密钥为({},{},{})".format(p,g,y))
M=int(input("请输入明文信息:"))
k=int(input("请随机选取整数:"))
C1=pow(g,k)%p
C2=(M*pow(y,k))%p
print("将密文({},{})发送".format(C1,C2))
n=pow(C1,x)%p
def gcd(a, b):while a != 0:a, b = b % a, areturn b
def findModReverse(n, p):  # 这个扩展欧几里得算法求模逆if gcd(n, p) != 1:return Noneu1, u2, u3 = 1, 0, nv1, v2, v3 = 0, 1, pwhile v3 != 0:q = u3 // v3v1, v2, v3, u1, u2, u3 = (u1 - q * v1), (u2 - q * v2), (u3 - q * v3), v1, v2, v3return u1 % p
s=findModReverse(n,p)
print(s)
m=s*C2%p
print("解密得到的明文信息为",m)

ElGamal密码算法相关推荐

  1. 密码算法(SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算)

    文章目录 SM1 对称密码 SM2 椭圆曲线公钥密码算法 SM3 杂凑算法 SM4 对称算法 同态加密 密态计算和隐私计算 安全多方计算技术 安全多方计算的应用场景 对称加密算法 非对称加密算法(公钥 ...

  2. 密码学:c/c 语言实现 pdf,典型密码算法C语言实现pdf

    典型密码算法C语言实现 内容简介 <典型密码算法C语言实现>详细讲述了一些典型密码算法的算法原理及C语言实现.书中密码算法包括:序列密码.分组密码.公钥密码和Hash算法,其中序列密码有祖 ...

  3. 商用密码应用与安全性评估要点笔记(密码发展、密码算法)

    1.3 密码发展 词条 内容 创新的动力 信息系统的应用需求和攻击威胁 发展三个阶段 古典密码.机械密码.现代密码 古典密码 代换密码,采用一个代换表将一段明文变换成一段密文.若代换表只有一个,是单表 ...

  4. 密码学(一)—— 背景、常用的密码算法简介,单向散列简介、数字签名简介

    背景 密码,最初的目的就是用于对信息的加密,计算机领域的密码技术种类繁多,但随着密码学的运用,密码还用于身份认证,防止否认等功能上.最基本的,是信息加密解密分为对称加密和非对称加密,这两者的区别在于是 ...

  5. ElGamal公钥密码算法及ElGamal数字签名方案实现

    ElGamal公钥密码算法是在密码协议中有着重要应用的一类公钥密码算法,其安全性是基于有限域上离散对数学问题的难解性.它至今仍是一个安全性良好的公钥密码算法.它既可用于加密又可用于数字签名的公钥密码体 ...

  6. 密码算法的概念及常用算法整理

    最近实在太忙,很早就整理好的东西,但是一直抽不出时间发,今天准备连续发三篇最近对密码这块内容的整理,我也是密码学的初学者,解释不到的地方欢迎指点,谢谢!接下来开始学习密码算法吧! 1.密码算法概念介绍 ...

  7. SM4密码算法(附源码)

    from:http://blog.csdn.net/mao0514/article/details/52930944 SM4是我们自己国家的一个分组密码算法,是国家密码管理局于2012年发布的.网址戳 ...

  8. python如何调用文件进行换位加密_python 换位密码算法的实例详解

    python 换位密码算法的实例详解 一前言: 换位密码基本原理:先把明文按照固定长度进行分组,然后对每一组的字符进行换位操作,从而实现加密.例如,字符串"Error should neve ...

  9. JavaScript实现希尔密码 算法(附完 整源码)

    JavaScript实现希尔密码 算法 Matrix.js完整源代码 hillCipher.js完整源代码 hillCipher.test.js完整源代码 Matrix.js完整源代码 export ...

最新文章

  1. shell [] [[ ]] {}区别
  2. android动画的实现原理,Android动画的实现原理 .
  3. 计算机操作系统课设总结,计算机操作系统课程设计
  4. [HNOI2018]游戏[拓扑排序]
  5. DLL/OCX文件的注册与数据执行保护DEP
  6. Android版添加phonegap---为APP添加CNZZ统计插件教程
  7. 下载丨2020 PG亚洲大会(PPT汇总)
  8. 利用SpringCloud搭建一个最简单的微服务框架
  9. CentOS自动打开网络连接
  10. Java面试题:2021大厂最全Java面试资料
  11. Redhat 5.4 安装vsftp
  12. 绘制神经网络工具汇总(重要)
  13. 什么是NVMe?一篇文章理清它的前生今世
  14. unity算法面试_Unity面试准备
  15. 黑盒测试设计测试用例的方法【修改】
  16. QT 字符乱码的原因
  17. rdkit 化学反应ReactionFromSmarts
  18. 游戏美术和策划,你感兴趣吗
  19. ubuntu基础命令总结
  20. opencv实现眼动检测【胡子哥哥】

热门文章

  1. 模仿R星官网(响应式)
  2. 计算机办公所有的快捷键大全,(办公最实用)电脑键盘快捷键大全.pdf
  3. 将小蚂蚁内网穿透bat注册成windows系统服务的方法步骤
  4. 【程序媛晒83行代码】被代码耽误的吃货小姐姐,用代码终结选择困难症
  5. Python数据可视化(三)绘制统计图形大全
  6. 五一假期出行的数据爬取和分析
  7. 快手java开发面试经验大全
  8. soapui测试webservice接口时如何传递xml参数
  9. the jre was not found in directory 安装weblogic踩过的坑
  10. 网络口碑传播为什么需要SEO优化?