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模块之StringIO使用示例
Apr 08 Python
python抓取最新博客内容并生成Rss
May 17 Python
Python实现将xml导入至excel
Nov 20 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
python遍历一个目录,输出所有的文件名的实例
Apr 23 Python
对python读取zip压缩文件里面的csv数据实例详解
Feb 08 Python
python字符串循环左移
Mar 08 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
Jun 27 Python
tensorflow如何继续训练之前保存的模型实例
Jan 21 Python
Python 字典中的所有方法及用法
Jun 10 Python
Python学习之路安装pycharm的教程详解
Jun 17 Python
Python数据类型最全知识总结
May 31 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实现Ftp用户的在线管理的代码
2007/03/06 PHP
PHP 类商品秒杀计时实现代码
2010/05/05 PHP
PHP生成excel时单元格内换行问题的解决方法
2010/08/26 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
PHP中实现获取IP和地理位置类分享
2015/02/10 PHP
PHP二维数组排序简单实现方法
2016/02/14 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
IE下window.onresize 多次调用与死循环bug处理方法介绍
2013/11/12 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
jQuery 获取兄弟元素的几种不错方法
2014/05/23 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
2017/06/26 jQuery
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
JavaScript继承与聚合实例详解
2019/01/22 Javascript
Vue侦测相关api的实现方法
2019/05/22 Javascript
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
Python写的Socks5协议代理服务器
2014/08/06 Python
Python greenlet实现原理和使用示例
2014/09/24 Python
python 深度学习中的4种激活函数
2020/09/18 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
Manuka Doctor美国官网:麦卢卡蜂蜜和蜂毒护肤
2016/12/25 全球购物
瑞典时尚耳机品牌:Urbanears
2017/07/26 全球购物
澳洲小众品牌的集合网站:BNKR
2018/02/23 全球购物
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
XML文档面试题
2015/08/05 面试题
广州某公司软件工程师面试题
2014/12/22 面试题
大学优秀班集体申报材料
2014/05/23 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
退休职工欢送会致辞
2015/08/01 职场文书