最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)ElGamal加密算法的示例代碼

 更新時(shí)間:2020年06月19日 11:01:49   作者:出門左拐是海  
ElGamal加密算法是一個(gè)基于迪菲-赫爾曼密鑰交換的非對(duì)稱加密算法。這篇文章通過示例代碼給大家介紹Python實(shí)現(xiàn)ElGamal加密算法的相關(guān)知識(shí),感興趣的朋友一起看看吧

在密碼學(xué)中,ElGamal加密算法是一個(gè)基于迪菲-赫爾曼密鑰交換的非對(duì)稱加密算法。它在1985年由塔希爾·蓋莫爾提出。GnuPG和PGP等很多密碼學(xué)系統(tǒng)中都應(yīng)用到了ElGamal算法。

ElGamal加密算法可以定義在任何循環(huán)群G上。它的安全性取決于G上的離散對(duì)數(shù)難題。

使用Python實(shí)現(xiàn)ElGamal加密算法,完成加密解密過程,明文使用的是125位數(shù)字(1000比特)。

代碼如下:

import random
from math import pow
a = random.randint(2, 10) #產(chǎn)生小于p的隨機(jī)常數(shù)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位數(shù)字,1000bit
  print("明文 :", msg)
  p = random.randint(pow(10, 20), pow(10, 50))# 獲得大素?cái)?shù)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()

總結(jié)

到此這篇關(guān)于Python實(shí)現(xiàn)ElGamal加密算法的示例代碼的文章就介紹到這了,更多相關(guān)python ElGamal加密算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python?jieba分詞添加自定義詞和去除不需要長尾詞的操作方法

    Python?jieba分詞添加自定義詞和去除不需要長尾詞的操作方法

    這篇文章主要介紹了Python?jieba分詞如何添加自定義詞和去除不需要長尾詞,主要介紹jieba的基礎(chǔ)用法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Django+python服務(wù)器部署與環(huán)境部署教程詳解

    Django+python服務(wù)器部署與環(huán)境部署教程詳解

    這篇文章主要介紹了Django+python服務(wù)器部署與環(huán)境部署教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Django Admin后臺(tái)添加數(shù)據(jù)庫視圖過程解析

    Django Admin后臺(tái)添加數(shù)據(jù)庫視圖過程解析

    這篇文章主要介紹了Django Admin后臺(tái)添加數(shù)據(jù)庫視圖過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 基于Python編寫一個(gè)簡單的http服務(wù)器

    基于Python編寫一個(gè)簡單的http服務(wù)器

    這篇文章主要為大家詳細(xì)介紹了如何基于Python編寫一個(gè)簡單的http服務(wù)器,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • Python中Thop庫的基本用例和參數(shù)說明

    Python中Thop庫的基本用例和參數(shù)說明

    這篇文章主要給大家介紹了關(guān)于Python中Thop庫的基本用例和參數(shù)說明的相關(guān)資料,THOP是PyTorch非常實(shí)用的一個(gè)第三方庫,可以統(tǒng)計(jì)模型的 FLOPs 和參數(shù)量,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • Python抓取網(wǎng)頁圖片難點(diǎn)分析

    Python抓取網(wǎng)頁圖片難點(diǎn)分析

    沒想到python是如此強(qiáng)大,令人著迷,以前看見圖片總是一張一張復(fù)制粘貼,現(xiàn)在好了,學(xué)會(huì)python就可以用程序?qū)⒁粡垙垐D片,保存下來。今天網(wǎng)上沖浪看到很多美圖,可是圖片有點(diǎn)多,不想一張一張地復(fù)制粘貼,怎么辦呢?辦法總是有的,即便沒有我們也可以創(chuàng)造一個(gè)辦法
    2023-01-01
  • Python實(shí)現(xiàn)鏈表反轉(zhuǎn)的方法分析【迭代法與遞歸法】

    Python實(shí)現(xiàn)鏈表反轉(zhuǎn)的方法分析【迭代法與遞歸法】

    這篇文章主要介紹了Python實(shí)現(xiàn)鏈表反轉(zhuǎn)的方法,結(jié)合實(shí)例形式分析了Python迭代法與遞歸法實(shí)現(xiàn)鏈表反轉(zhuǎn)的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • Python中的super()方法使用簡介

    Python中的super()方法使用簡介

    這篇文章主要介紹了Python中的super()方法的使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • pandas 表連接的具體實(shí)現(xiàn)

    pandas 表連接的具體實(shí)現(xiàn)

    在Pandas中使用merge()函數(shù)可以實(shí)現(xiàn)類似于SQL的連接操作,包括左連接、右連接、內(nèi)連接和外連接,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • python抓取百度首頁的方法

    python抓取百度首頁的方法

    這篇文章主要介紹了python抓取百度首頁的方法,涉及Python使用urllib模塊實(shí)現(xiàn)頁面抓取的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05

最新評(píng)論

依安县| 定南县| 三门峡市| 临清市| 元阳县| 郑州市| 韶山市| 龙门县| 万源市| 股票| 南昌市| 石泉县| 永嘉县| 梁河县| 太仆寺旗| 浮梁县| 扶余县| 横峰县| 高平市| 泽普县| 常州市| 高雄县| 清水河县| 临沧市| 高唐县| 唐河县| 南漳县| 陇川县| 赣州市| 和田市| 寻乌县| 遵义县| 淅川县| 葵青区| 拉萨市| 星子县| 眉山市| 普兰店市| 革吉县| 湾仔区| 天镇县|