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实现将DOC文档转换为PDF的方法
Jul 25 Python
python获取当前运行函数名称的方法实例代码
Apr 06 Python
Python入门_条件控制(详解)
May 16 Python
Python实现OpenCV的安装与使用示例
Mar 30 Python
python+selenium实现简历自动刷新的示例代码
May 20 Python
python爬虫刷访问量 2019 7月
Aug 01 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
Sep 29 Python
python装饰器原理与用法深入详解
Dec 19 Python
基于pygame实现童年掌机打砖块游戏
Feb 25 Python
Pandas把dataframe或series转换成list的方法
Jun 14 Python
浅析Python __name__ 是什么
Jul 07 Python
详解scrapy内置中间件的顺序
Sep 28 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中global和$GLOBALS[]的分析之一
2012/02/02 PHP
thinkphp3.2.2前后台公用类架构问题分析
2014/11/25 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
用 JSON 处理缓存
2007/04/27 Javascript
jQuery 常见开发使用技巧总结
2009/12/26 Javascript
jQuery each()小议
2010/03/18 Javascript
细说浏览器特性检测(2)-通用事件检测
2010/11/05 Javascript
javascript中检测变量的类型的代码
2010/12/28 Javascript
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
javascript创建数组之联合数组的使用方法示例
2013/12/26 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
jquery背景跟随鼠标滑动导航
2015/11/20 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
全面解析JavaScript中“&amp;&amp;”和“||”操作符(总结篇)
2016/07/18 Javascript
JS实现的简单轮播图运动效果示例
2016/12/22 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
Python入门教程之if语句的用法
2015/05/14 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
深入浅析python变量加逗号,的含义
2020/02/22 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
2020/05/25 Python
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
某同学的自我鉴定范文
2013/12/26 职场文书
大学军训感想
2014/02/12 职场文书
大学生就业意向书范文
2014/04/01 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
关于保护环境的建议书
2019/06/24 职场文书
Go 内联优化让程序员爱不释手
2022/06/21 Golang