Paillier加密代码实现

Paillier加密代码实现

Paillier加密python代码实现

Paillier加密是一种十分流行的部分同态加密算法,在python中有很多库可以直接实现Paillier同态加密,比如pypaillier以及phe库,然而在实际应用时,直接调用库函数经常会报错,因此我们需要根据具体的问题设计函数来实现Paillier加密。Paillier加密的具体算法如下:

在这里插入图片描述
根据Paillier加密的算法,我们可以设计如下的程序来实现Paillier加密,其中我们取 g = n + 1 g=n+1 g=n+1,同时取 p = 61 p=61 p=61, q = 53 q=53 q=53

import random
import math


def gcd(a, b):
    while b != 0:
        a, b = b, a % b
    return a


def lcm(a, b):
    return a * b // gcd(a, b)


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


def generate_keypair():
    p = 61  # 选择两个素数 p 和 q
    q = 53
    n = p * q
    lam = lcm(p - 1, q - 1)

    g = n + 1  # 选择 g,确保其阶为 n²
    mu = pow(L(pow(g, lam, n ** 2), n), -1, n)

    return n, g, lam, mu


def encrypt(m, n, g):
    r = random.randint(1, n)  # 生成随机数 r
    c = (pow(g, m, n ** 2) * pow(r, n, n ** 2)) % (n ** 2)  # 计算密文 c
    return c


def decrypt(c, n, lam, mu, g):
    m = (L(pow(c, lam, n ** 2), n) * mu) % n  # 解密得到明文 m
    return m


# 生成密钥对
n, g, lam, mu = generate_keypair()

# 要加密的明文
m = 5

# 加密过程
c = encrypt(m, n, g)

# 解密过程
decrypted_m = decrypt(c, n, lam, mu, g)

print("明文: {}".format(m))
print("加密后的密文: {}".format(c))
print("解密后的明文: {}".format(decrypted_m))

代码运行结果如下:

明文: 5
加密后的密文: 8226667
解密后的明文: 5

由于 r r r的取值是随机的,因此每次加密的结果都会有所不同,同时在实际应用是可以对参数 p p p, q q q以及 r r r的值进行优化改进,使得算法加密和解密的速率更快。

  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值