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在linux系统下获取系统内存使用情况的方法
May 11 Python
Python的re模块正则表达式操作
May 25 Python
Python实现发送QQ邮件的封装
Jul 14 Python
Python实现删除时保留特定文件夹和文件的示例
Apr 27 Python
python递归全排列实现方法
Aug 18 Python
浅谈Python基础—判断和循环
Mar 22 Python
python分布式编程实现过程解析
Nov 08 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
Jun 24 Python
利用keras使用神经网络预测销量操作
Jul 07 Python
如何用 Python 制作一个迷宫游戏
Feb 25 Python
python基于turtle绘制几何图形
Jun 15 Python
Python OpenCV之常用滤波器使用详解
Apr 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
php在线解压ZIP文件的方法
2014/12/30 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
javascript获取当前的时间戳的方法汇总
2015/07/26 Javascript
cocos2dx骨骼动画Armature源码剖析(一)
2015/09/08 Javascript
详解XMLHttpRequest(一)同步请求和异步请求
2016/09/14 Javascript
js滚轮事件兼容性问题需要注意哪些
2016/11/15 Javascript
javascript学习之json入门
2016/12/22 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
easyUI下拉列表点击事件使用方法
2017/05/18 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
Vue下滚动到页面底部无限加载数据的示例代码
2018/04/22 Javascript
element-ui 设置菜单栏展开的方法
2018/08/22 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
微信小程序自定义头部导航栏(组件化)
2019/11/15 Javascript
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
python 字典(dict)按键和值排序
2016/06/28 Python
Python入门之三角函数atan2()函数详解
2017/11/08 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
用于业余项目的8个优秀Python库
2018/09/21 Python
python实现逐个读取txt字符并修改
2018/12/24 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
2020/03/10 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
基于python实现监听Rabbitmq系统日志代码示例
2020/11/28 Python
复古风格的女装和装饰品:ModCloth
2017/12/29 全球购物
英国电气世界:Electrical World
2019/09/08 全球购物
印度尼西亚最完整和最大的在线药房网站:Farmaku.com
2019/11/23 全球购物
会计求职信
2014/05/29 职场文书
2016春季运动会通讯稿
2015/07/18 职场文书
clear 万能清除浮动(clearfix:after)
2023/05/21 HTML / CSS