Python实现ElGamal加密算法的示例代码


Posted in Python onJune 19, 2020

在密码学中,ElGamal加密算法是一个基于迪菲-赫尔曼密钥交换的非对称加密算法。它在1985年由塔希尔·盖莫尔提出。GnuPG和PGP等很多密码学系统中都应用到了ElGamal算法。

ElGamal加密算法可以定义在任何循环群G上。它的安全性取决于G上的离散对数难题。

使用Python实现ElGamal加密算法,完成加密解密过程,明文使用的是125位数字(1000比特)。

代码如下:

import random
from math import pow
a = random.randint(2, 10) #产生小于p的随机常数a

def gcd(a, b):
  if a < b:
    return gcd(b, a)
  elif a % b == 0:
    return b;
  else:
    return gcd(b, a % b)
  # Generating large random numbers

def gen_key(q):
  key = random.randint(pow(10, 20), q)
  while gcd(q, key) != 1:
    key = random.randint(pow(10, 20), q)
  return key

# Modular exponentiation
def power(a, b, c):
  x = 1
  y = a
  while b > 0:
    if b % 2 == 0:
      x = (x * y) % c;
    y = (y * y) % c
    b = int(b / 2)
  return x % c

# Asymmetric encryption
def encrypt(msg, p, h, r):
  en_msg = []
  b = gen_key(p) # 得b
  K = power(h, b, p)#K=(Sa)^b mod p
  C1 = power(r, b, p) #C1=Sb=r^b mod p
  for i in range(0, len(msg)):
    en_msg.append(msg[i])
  print("C1 : ", C1)
  # print("(Sa)^b mod p used : ", K)
  for i in range(0, len(en_msg)):
    en_msg[i] = K * ord(en_msg[i])
  print("C2 : ", en_msg)
  return en_msg, C1

def decrypt(C2, C1, a, p):
  dr_msg = []
  h = power(C1, a, p)
  for i in range(0, len(C2)):
    dr_msg.append(chr(int(C2[i] / h)))
  return dr_msg

# Driver code
def main():
  msg = '01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234'        # 共125位数字,1000bit
  print("明文 :", msg)
  p = random.randint(pow(10, 20), pow(10, 50))# 获得大素数q
  r = random.randint(2, p)#得r
  a = gen_key(p) # Private key for receiver
  h = power(r, a, p)
  C2, C1 = encrypt(msg, p, h, r)
  dr_msg = decrypt(C2, C1, a, p)
  dmsg = ''.join(dr_msg)
  print("解密后文 :", dmsg);

if __name__ == '__main__':
  main()

总结

到此这篇关于Python实现ElGamal加密算法的示例代码的文章就介绍到这了,更多相关python ElGamal加密算法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python获取apk文件URL地址实例
Nov 01 Python
用Python写冒泡排序代码
Apr 12 Python
Python创建xml文件示例
Mar 22 Python
Python将多个excel表格合并为一个表格
Feb 22 Python
Python正则表达式指南 推荐
Oct 09 Python
python实现石头剪刀布程序
Jan 20 Python
python实现批量注册网站用户的示例
Feb 22 Python
numpy.linspace函数具体使用详解
May 27 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
Python urllib.request对象案例解析
May 11 Python
python math模块的基本使用教程
Jan 16 Python
python 爬取哔哩哔哩up主信息和投稿视频
Jun 07 Python
python 字符串的驻留机制及优缺点
Jun 19 #Python
Keras自动下载的数据集/模型存放位置介绍
Jun 19 #Python
Python应用实现处理excel数据过程解析
Jun 19 #Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 #Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 #Python
Python内置方法和属性应用:反射和单例(推荐)
Jun 19 #Python
Python应用实现双指数函数及拟合代码实例
Jun 19 #Python
You might like
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
解析数组非数字键名引号的必要性
2013/08/09 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
js自定义事件代码说明
2011/01/31 Javascript
表单JS弹出填写提示效果代码
2011/04/16 Javascript
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
2012/12/27 Javascript
基于豆瓣API+Angular开发的web App
2015/01/02 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
AngularJS 表达式详解及实例代码
2016/09/14 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
详解vue与后端数据交互(ajax):vue-resource
2017/03/16 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
vue上传图片组件编写代码
2017/07/26 Javascript
jQuery中extend函数简单用法示例
2017/10/11 jQuery
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
React Native react-navigation 导航使用详解
2017/12/01 Javascript
基于JavaScript中标识符的命名规则介绍
2018/01/06 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
[01:10]DOTA2亚洲邀请赛 征战号角响彻全场
2015/01/06 DOTA
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
Flask框架URL管理操作示例【基于@app.route】
2018/07/23 Python
Python判断有效的数独算法示例
2019/02/23 Python
Python中pymysql 模块的使用详解
2019/08/12 Python
css3选择器基本介绍
2014/12/15 HTML / CSS
如何手工释放资源
2013/12/15 面试题
Servlet如何得到客户端机器的信息
2014/10/17 面试题
三年级班级文化建设方案
2014/05/04 职场文书
科技之星事迹材料
2014/06/02 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
毕业设计论文评语
2014/12/31 职场文书
违反纪律检讨书范文
2015/05/07 职场文书
2016党员党课心得体会
2016/01/07 职场文书