IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> paillier同态加密Python测试中的异常解决 -> 正文阅读

[区块链]paillier同态加密Python测试中的异常解决

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()

    ?

  • 再次运行时,问题解决;

    ?

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

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:55:32  更:2022-07-20 18:55:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:36:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码