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内置函数OCT详解
Nov 09 Python
Unicode和Python的中文处理
Mar 19 Python
Django 2.0版本的新特性抢先看!
Jan 05 Python
利用python将pdf输出为txt的实例讲解
Apr 23 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
Jul 11 Python
Python使用正则表达式分割字符串的实现方法
Jul 16 Python
pytorch torch.expand和torch.repeat的区别详解
Nov 05 Python
Python hashlib加密模块常用方法解析
Dec 18 Python
基于python的opencv图像处理实现对斑马线的检测示例
Nov 29 Python
python 实现IP子网计算
Feb 18 Python
Python数据结构之队列详解
Mar 21 Python
Python中使用Opencv开发停车位计数器功能
Apr 04 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
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
WINXP下apache+php4+mysql
2006/11/25 PHP
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
CI框架中redis缓存相关操作文件示例代码
2016/05/17 PHP
PHP ADODB实现分页功能简单示例
2018/05/25 PHP
JS模拟面向对象全解(一、类型及传递)
2011/07/13 Javascript
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
2013/11/08 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法
2015/10/01 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
详解用vue.js和laravel实现微信支付
2017/06/23 Javascript
vue项目中将element-ui table表格写成组件的实现代码
2019/06/12 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
微信小程序全局变量改变监听的实现方法
2019/07/15 Javascript
vue 组件内获取actions的response方式
2019/11/08 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
python数据结构树和二叉树简介
2014/04/29 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
python lambda的使用详解
2021/02/26 Python
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
常见的软件开发流程有哪些
2015/11/14 面试题
小学教师岗位职责
2013/11/25 职场文书
三年级数学教学反思
2014/01/31 职场文书
经济贸易专业自荐信
2014/06/11 职场文书
新闻学专业求职信
2014/07/28 职场文书
校园广播稿精选
2014/10/01 职场文书
2014银行授权委托书样本
2014/10/04 职场文书
2015年市场部工作总结
2015/04/30 职场文书