700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > ElGamal算法加解密

ElGamal算法加解密

时间:2021-08-24 23:07:26

相关推荐

ElGamal算法加解密

文章目录

ElGamal算法加解密算法流程代码实现测试数据运行结果

ElGamal算法加解密

算法流程

参数选取:素数p,生成元g,小于p的随机非负整数x产生密钥:公钥: y = g ^ x mod p, 私钥: x加密过程:选取小于p的随机非负整数k, 对于明文M, 产生密文对{C1 = g ^ x mod p, C2 = M * y ^ k mod p}解密过程:M = C2 / C1 ^ x mod p注意:k需要永久保存,且不能重复使用

代码实现

# -*-coding:utf-8-*-"""File Name: ElGamal算法加解密.pyProgram IDE: PyCharmCreate Time: -09-16 16:11Create By Author: 陆依依"""# 密钥产生:素数p,生成元g,小于p的随机非负整数x, 产生公钥: y = g ^ x mod p, 私钥: x## 加密过程:小于p的随机非负整数k, 明文M, 密文对{C1 = g ^ x mod p, C2 = M * y ^ k mod p}## 解密过程:M = C2 / C1 ^ x mod p## 注意:k需要永久保存,且不能重复使用def Init():print("ElGamal加密算法:")print("输入:素数p,生成元g,小于p的随机数x, 私钥:x,小于p的随机非负整数k, 明文M")print("请输入初始参数:")p = int(input("大素数p="))g = int(input("生成元g="))x = int(input("随机数x="))k = int(input("随机数k="))M = int(input("明文M="))return p, g, x, k, Mdef BuildKey(g, x, p):return g**x % p, xdef Encrypt(p, g, k, y, M):return g**k % p, (M * y**k) % p# 求分数的模p同余 a/x mod pdef ModP(a, x, p):# 统一x为正数if x < 0:x = -xa = -a# 统一a为非负数while a < 0:a += pa = a % pi = 0while True:if (i*x) % p == a:return i*xi = i + 1# 解密def Decrypt(C1, C2, x, p):return ModP(C2, C1**x, p) / abs(C1**x)# demoif __name__ == "__main__":# 初始化参数p, g, x, k, M = Init()# 产生公私钥对(y, x)y, x = BuildKey(g, x, p)# 加密,产生密钥对(C1, C2)C1, C2 = Encrypt(p, g, k, y, M)print("密文对为{" + str(C1) + ", " + str(C2) + "}")# 解密M1 = int(Decrypt(C1, C2, x, p))print("解密后的明文:" + str(M1))

测试数据

# 测试数据1:密文对:(97,31)# 97# 5# 58# 36# 3

运行结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。