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定时检查启动某个exe程序适合检测exe是否挂了
Jan 21 Python
python模拟新浪微博登陆功能(新浪微博爬虫)
Dec 24 Python
Python实现合并字典的方法
Jul 07 Python
Python制作简单的网页爬虫
Nov 22 Python
Python md5与sha1加密算法用法分析
Jul 14 Python
PyQt 线程类 QThread使用详解
Jul 16 Python
python机器学习案例教程——K最近邻算法的实现
Dec 28 Python
python django中8000端口被占用的解决
Dec 17 Python
Python爬虫之Spider类用法简单介绍
Aug 04 Python
python 如何调用 dubbo 接口
Sep 24 Python
python中time包实例详解
Feb 02 Python
python3 hdf5文件 遍历代码
May 19 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中的(伪)多线程与多进程
2013/07/01 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
(function($){...})(jQuery)的意思
2010/07/22 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
Node.js模块加载详解
2014/08/16 Javascript
基于jQuery实现最基本的淡入淡出效果实例
2015/02/02 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
2015/10/28 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
js读取json文件片段中的数据实例
2017/03/09 Javascript
JavaScript表单验证实现代码
2017/05/22 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
js获取form表单中name属性的值
2019/02/27 Javascript
解决vue跨域axios异步通信问题
2019/04/17 Javascript
js定义类的方法示例【ES5与ES6】
2019/07/30 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
[02:53]2018年度DOTA2最佳战队-完美盛典
2018/12/17 DOTA
python实现批量按比例缩放图片效果
2018/03/30 Python
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
python3 flask实现文件上传功能
2020/03/20 Python
Django继承自带user表并重写的例子
2019/11/18 Python
python实现拼图小游戏
2020/02/22 Python
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
乳制品整治工作方案
2014/05/29 职场文书
国家奖学金获奖感言
2014/08/16 职场文书
群众路线查摆问题整改措施思想汇报
2014/10/10 职场文书
2014年组织部工作总结
2014/11/14 职场文书
市级三好学生评语
2014/12/29 职场文书
婚礼答谢礼品
2015/01/20 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书