基于python实现的paillier算法例子(极简)

参考:经典同态加密算法Paillier解读 - 原理、实现和应用

        文中对Pailler进行了详细的解读并分享了相关源代码链接:python-phe同台算法库

        举了一个简单的例子:

2.3 Paillier算法

这里代码中lam = λ  mu=μ,由以上计算过程获得

Alice将 n 和g 封装成公钥 public-key = (n, g)
将λ和μ封装成私钥: private-key = (λ, μ)

执行前我们需要安装gmpy2库

!pip install gmpy2

加密:

Bob需要对明文进行加密,即获取了Alice发来的公钥public-key = (n, g)

import gmpy2

p = 11 #大素数
q = 19 #大素数
n = 209 #乘积
lam = 90 #最小公倍数
g = 147 #随机整数
mu = 153 

#明文m 以及 随机数r已经定义
m = 8
r = 3
n_square = pow(n, 2) # n_square = 43681
c = gmpy2.mod(pow(g, m)*pow(r, n), n_square) # c =  32948
print(c)
#输出结果 32948 即加密结果

解密

c = 32948
m  = gmpy2.mod(L(gmpy2.mod(pow(c, lam), n_square), n) * mu, n) # m = 8

在这里,代码中有一个L函数,原文并没有写出来。

此函数在计算μ时实际上会用到,但原文没有进行函数计算,而是直接得出了μ的值。

然而,解密时仍然需要用到,下面附上。

函数L代码实现非常简单:

def L(x,n):
    return (x - 1) / n

至此,简单的Paillier算法示例结束。

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SmartBeeL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值