利用python写一个paillier同态加密算法代码
时间: 2024-01-11 12:03:44 浏览: 136
Paillier 同态加密
好的,以下是一个简单的Paillier同态加密算法的Python代码:
``` python
from Crypto.Util import number
import random
def generate_keypair(n_length):
p = number.getPrime(n_length // 2)
q = number.getPrime(n_length // 2)
n = p * q
lam = number.lcm(p - 1, q - 1)
g = random.randint(1, n ** 2)
while number.GCD(g, n ** 2) != 1:
g = random.randint(1, n ** 2)
mu = number.inverse(number.L(pow(g, lam, n ** 2)), n)
return (n, g), (lam, mu)
def encrypt(pk, m):
n, g = pk
r = random.randint(1, n)
c = (pow(g, m, n ** 2) * pow(r, n, n ** 2)) % (n ** 2)
return c
def decrypt(sk, c):
lam, mu = sk
n = (lam + 1) // 2
dL = ((c ** lam) - 1) // n
m = (dL * mu) % n
return m
def add(pk, c1, c2):
n = pk[0]
return (c1 * c2) % (n ** 2)
# Example usage:
pk, sk = generate_keypair(1024)
m1 = 10
m2 = 20
c1 = encrypt(pk, m1)
c2 = encrypt(pk, m2)
c3 = add(pk, c1, c2)
print("Sum of", m1, "and", m2, "is", decrypt(sk, c3))
```
请注意,Paillier加密算法并不是精确的同态加密算法,而是部分同态加密算法。因此,使用Paillier加密算法执行加法后解密的结果可能会偏离预期的结果。
阅读全文