paillier同态加密Python测试中的异常解决

paillier同态加密Python测试中的异常解决,第1张

paillier同态加密Python测试中的异常解决历程记录

本文的加法同态加密是用 Python 实现,所使用的第三方包为phe

目录

paillier同态加密Python实现中的异常解决历程记录

Python 实现

测试代码

异常


关于同态加密的背景及原理,读者可参考高人的文章:

同态加密之Paillier算法_林立可的博客-CSDN博客_paillier同态加密之Paillier算法0,背景介绍同态加密,即原来在明文上的运算 *** 作,经过同态加密后在密文上同样可以进行。一般有半同态和全同态加密之分:半同态加密 (Partial Homomorphic Encryption, PHE):只支持某些特定的运算法则 f ,PHE 的优点是原理简单、易实现,缺点是仅支持一种运算(加法或乘法);层次同态加密(Liveled HE,LHE):一般支持有限次数的加密算法,LHE 的优点是同时支持加法和乘法,并且因为出现时间比 PHE 晚,所以技术更加成熟、一https://blog.csdn.net/qq_40589204/article/details/116310125?spm=1001.2100.3001.7377&utm_medium=distribute.pc_feed_blog_category.none-task-blog-classify_tag-6-116310125-null-null.nonecase&depth_1-utm_source=distribute.pc_feed_blog_category.none-task-blog-classify_tag-6-116310125-null-null.nonecase

Python 实现

测试代码
from phe import paillier
import time
​
print('默认密钥长度:', paillier.DEFAULT_KEYSIZE)
​
pub_key, pri_key = paillier.generate_paillier_keypair(n_length=2048)
​
message_list = [22.3253, 2333, -2.22e-29]
​
# encryption
start_time = time.time()
encrypted_msg_list = [pub_key.encrypt(m) for m in message_list]  # 异常点
end_time = time.time()
​
print('加密耗时:', end_time - start_time)
​
# decryption
time_start = time.time()
decrypted_msg_list = [pri_key.decrypt(c) for c in encrypted_msg_list]
time_end = time.time()
​
print('解密耗时:', time_end - time_start)
​
# 同态测试(加法、乘法)
a, b, c = encrypted_msg_list
​
a_sum = a + 5
a_sub = a - 3
b_mul = b * 1
c_div = c / -10.0
​
print('a:', a.ciphertext())
print('a_sum:', a_sum.ciphertext())
​
print("a + 5 =", pri_key.decrypt(a_sum))
print("a - 3 =", pri_key.decrypt(a_sub))
print("b * 1 =", pri_key.decrypt(b_mul))
print("c / -10.0 =", pri_key.decrypt(c_div))
​
# cipher + cipher
print((pri_key.decrypt(a) + pri_key.decrypt(b)) == pri_key.decrypt(a + b))
print((pri_key.decrypt(a) - pri_key.decrypt(b)) == pri_key.decrypt(a - b))
# print((pri_key.decrypt(a) * pri_key.decrypt(b)) == pri_key.decrypt(a * b))  # Err -- multiply not supported 

异常

示意图

异常显示,第三方包gmpy2中不存在方法模块gmpy2.mod(a, b)

查询gmpy2文档

 

发现对应功能的方法模块名已经变成gmpy2.t_mod()

于是追溯到phe内的util.py文件,将其中的gmpy2.mod()改为gmpy2.t_mod()

 

再次运行时,问题解决;

 

每一个不曾起舞的日子,都是对生命的辜负。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/2991936.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)

保存