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解析中国天气网的天气数据
Mar 21 Python
利用Python和OpenCV库将URL转换为OpenCV格式的方法
Mar 27 Python
Python3实现从指定路径查找文件的方法
May 22 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
Aug 07 Python
python K近邻算法的kd树实现
Sep 06 Python
详解将Django部署到Centos7全攻略
Sep 26 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
Jun 18 Python
PyQt Qt Designer工具的布局管理详解
Aug 07 Python
使用Python的networkx绘制精美网络图教程
Nov 21 Python
python 初始化一个定长的数组实例
Dec 02 Python
Django模板标签中url使用详解(url跳转到指定页面)
Mar 19 Python
python代码区分大小写吗
Jun 17 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
PHP 如何向 MySQL 发送数据
2006/10/09 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
2015/01/26 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
EasySlider 基于jQuery功能强大简单易用的滑动门插件
2010/06/11 Javascript
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
2013/12/17 Javascript
Jquery的each里用return true或false代替break或continue
2014/05/21 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
2015/09/14 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
2015/12/04 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
详解webpack和webpack-simple中如何引入css文件
2017/06/28 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
谈谈JavaScript中的函数
2020/09/08 Javascript
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
Python实现购物程序思路及代码
2017/07/24 Python
TensorFlow变量管理详解
2018/03/10 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
CSS3 透明色 RGBA使用介绍
2013/08/06 HTML / CSS
YOOX美国官方网站:全球著名的多品牌时尚网络概念店
2016/09/11 全球购物
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
大学毕业生个人自荐信范文
2014/01/08 职场文书
承认错误的检讨书
2014/01/30 职场文书
幼儿园秋游感想
2014/03/12 职场文书
食品业务员岗位职责
2014/03/18 职场文书
2014年党员公开承诺践诺书
2014/03/25 职场文书
2014党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android