Pyfhel库学习1

上个博客介绍了一下Pyfhel这个同态加密库的安装,今天就来学习一下其用法。其官方稳定版的doc文件在pyfhel.readdocs.io,大家可以自己去看一下。下面我就自己翻译一下这个内容。

Pyfhel是一个python版的同态加密库。该库是基于C++的库开发的,当前版本只支持微软开源的SEAL库

  1. Pyfhel.Pyfhel类,支持加密后的整型和双精度浮点型数的加法、乘法、减法和幂指数的运算。同态加密的应用是基于SEAL/PALISADE/HELIB开发的。Pyfhel用PyPtxt格式的明文类和PyCtxt格式的密文类。具体的例子如下:
from Pyfhel import Pyfhel, PyPtxt, PyCtxt
# 实例化一个Pyfhel
HE = Pyfhel()
HE.contextGen(p=65537)
HE.KeyGen()#注意:文档里给了参数p=65537,但测试的2.2.1版本并不需要该参数,在HE.ContextGen(p=65537)里已经确定了

#下面四行其实可以用两行,这里是先编码然后再加密。其实可以直接用
# c1 = HE.encryptInt(2)
# c2 = HE.encryptInt(4)
p1 = HE.encode(4)
p2 = HE.encode(2)
c1 = HE.encrypt(p1)
c2 = HE.encrypt(p2)
# 密文的加法
c1 = c1 + c2
p_res = HE.decrypt(c1)
#如果要用print输出,还需要如下的操作,因为p_res的类型还是PyPtxt.或者用HE.decryptInt(c1)直接将c1转为int型
print(HE.decode(p_res))

#这样输出结果就是6.

1.add(PyCtxt ctxt, PyCtxt ctxt_other, bool in_new_ctxt=False)
该函数是完成两个PyCtxt型的密文加法。两个PyCtxt编码格式必须一样,是同一个context(这里我翻译成背景,其实就是同一个上文中HE.contextGen(p=65537)同一个HE加密产生的两个PyCtxt)和同一个公钥。返回值会赋给第一个ctxt.

参数:            
  • ctxt(PyCtxt): 密文加数1

  • ctxt_other(PyCtxt):密文加数2

  • in_new_ctxt(bool=False):该参数默认是False,不产生一个新的PyCtxt格式的密文,而是将两个密文加数的结果传给ctxt;如果该参数设置成True,则会创建一个新的PyCtxt格式的密文。

    返回值:
    两个加数的和,该结果是PyCtxt格式的,如果in_new_ctxt是False(默认),则将结果传给第一个加数,否则将返回一个新的PyCtxt格式的密文。

#接着上面的一段代码测试:
HE.add(c1, c2)
print(HE.decryptInt(c1))
#此时的结果应该是8,因为前面有c1 = c1 + c2,现在又将c1+c2的结果传给了c1

c3 = HE.add(c1, c2, in_new_ctxt=True)
print(HE.decryptInt(c3))#输出为10
print(HE.decryptInt(c1))#输出为8

2.add_plain(PyCtxt ctxt, PyPtxt ptxt, bool in_new_ctxt=False)
一个密文加一个明文的和,in_new_ctxt默认的话将二者相加的和传给第一个数。要求明文必须用产生密文的HE来encode,也意味着二者有同样的公钥。

参数:

  • ctxt (PyCtxt):一个数的密文,其将加另一个明文的ptxt。
  • ptxt (PyPtxt):一个数的明文,只是encode,并未encrypt。
  • in_new_ctxt (bool=False):这个参数跟add里面的最后一个参数的用法一样。

返回值:
返回二者和的密文。

c4 = HE.add_plain(c3, p1)
print(HE.decode(HE.decrypt(c4)))#输出14

边学习,边写这个博客吧。未完待续~

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值